bitkeeper revision 1.160 (3e806348iI6F7p-OrCqKtE4h8_NgxQ)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Tue, 25 Mar 2003 14:10:16 +0000 (14:10 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Tue, 25 Mar 2003 14:10:16 +0000 (14:10 +0000)
.del-xor.h~2cd144e48fc282fb:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/xor.h
.del-vga.h~f739bcd0d15a060b:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/vga.h
.del-user.h~2416efc51bfdf653:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/user.h
.del-unistd.h~542a4265bbde875f:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/unistd.h
.del-unaligned.h~3720d8e6f6489c70:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/unaligned.h
.del-ucontext.h~7c514eccb96e5c2c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ucontext.h
.del-uaccess.h~1db7128cf065d28:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/uaccess.h
.del-types.h~6f89af02373cf40e:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/types.h
.del-tlb.h~36a10111face8cf8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/tlb.h
.del-timex.h~14ba40d5403480f8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/timex.h
.del-termios.h~10cb1919354bb3c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/termios.h
.del-termbits.h~9f49d578b6425137:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/termbits.h
.del-system.h~1209f9cb8d09be:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/system.h
.del-swapfile.c~28c1c327b22a067f:
  Delete: old/xenolinux-2.4.16-sparse/mm/swapfile.c
.del-string.h~1bd164bf2f37435a:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/string.h
.del-string-486.h~70f2949afd4c7217:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/string-486.h
.del-statfs.h~925b3af593956e2d:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/statfs.h
.del-stat.h~e85bc81529de3a4a:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/stat.h
.del-panic.c~5033fabb3f2e710c:
  Delete: old/xenolinux-2.4.16-sparse/kernel/panic.c
.del-mremap.c~5787787c5a3b49d:
  Delete: old/xenolinux-2.4.16-sparse/mm/mremap.c
.del-memory.c~ec1a749ca2ed8acd:
  Delete: old/xenolinux-2.4.16-sparse/mm/memory.c
.del-major.h~7653e946e9bf8159:
  Delete: old/xenolinux-2.4.16-sparse/include/linux/major.h
.del-main.c~de169eb833d5a5cb:
  Delete: old/xenolinux-2.4.16-sparse/init/main.c
.del-debug.h~e0aa141e34ec6221:
  Delete: old/xenolinux-2.4.16-sparse/include/linux/sunrpc/debug.h
.del-blk.h~87e7b6403472571f:
  Delete: old/xenolinux-2.4.16-sparse/include/linux/blk.h
.del-spinlock.h~fc0a4c0ddea83815:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/spinlock.h
.del-softirq.h~c188e7ac18c858a9:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/softirq.h
.del-sockios.h~65e1b7ba563df2c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/sockios.h
.del-socket.h~e3ba5757776f00c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/socket.h
.del-smplock.h~72176dfb8142375e:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/smplock.h
.del-smp.h~80313a5f7eb193bb:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/smp.h
.del-signal.h~2f1c9e8a4364ed8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/signal.h
.del-siginfo.h~348801659d7e1334:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/siginfo.h
.del-sigcontext.h~1b647a394613b0dc:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/sigcontext.h
.del-shmparam.h~c83ce37d9b16061c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/shmparam.h
.del-shmbuf.h~3ff48e518b9ecb0a:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/shmbuf.h
.del-setup.h~2d7d5e0b8c7c48dc:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/setup.h
.del-serial.h~90dee919c827ab29:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/serial.h
.del-sembuf.h~f0fa7347b9fc071:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/sembuf.h
.del-semaphore.h~d9f40f7e118c9d3c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/semaphore.h
.del-segment.h~cc492acab0d69477:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/segment.h
.del-scatterlist.h~4be6ff4f53a3579b:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/scatterlist.h
.del-rwsem.h~c9865b4ec1423b3a:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/rwsem.h
.del-rwlock.h~3e6f58ae32c920e9:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/rwlock.h
.del-resource.h~7e8eaa833cc25dca:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/resource.h
.del-ptrace.h~c55079be77b9ee19:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ptrace.h
.del-processor.h~52612a255dfb7cbb:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/processor.h
.del-posix_types.h~b6e7c803f3dbab8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/posix_types.h
.del-poll.h~f9b451e3ea9e50c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/poll.h
.del-pgtable.h~43ac63ace2e93820:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable.h
.del-pgtable-3level.h~abbe18b96121bd83:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-3level.h
.del-pgtable-2level.h~8fe0307e54d8bf9b:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-2level.h
.del-pgalloc.h~9e75e06aeb89d316:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/pgalloc.h
.del-parport.h~cff09d1bc0f89454:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/parport.h
.del-param.h~471736b770596742:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/param.h
.del-page.h~865cbedbe3bc818e:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/page.h
.del-namei.h~38354dac74ae2dd8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/namei.h
.del-mtrr.h~ea4e1ec9703521e8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mtrr.h
.del-msr.h~a6998ff4f5da0e0c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/msr.h
.del-msgbuf.h~5da37442976489a0:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/msgbuf.h
.del-mpspec.h~381f4baa7d484bfb:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mpspec.h
.del-module.h~5a2fa3572f0b6bae:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/module.h
.del-mmx.h~ef22db6d3bb87f3a:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mmx.h
.del-mmu_context.h~9fbf061b3d508d67:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu_context.h
.del-mmu.h~ba2b86348e168416:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu.h
.del-mman.h~18ee2a138def6b36:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mman.h
.del-mca_dma.h~eddb775e770502cb:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mca_dma.h
.del-mc146818rtc.h~c21b56e82a291c22:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/mc146818rtc.h
.del-math_emu.h~4613a62a919e4aa1:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/math_emu.h
.del-locks.h~399a95316c4c9ba7:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/locks.h
.del-linux_logo.h~a388673ba10b8bf8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/linux_logo.h
.del-ldt.h~c03c75bf2fa23f40:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ldt.h
.del-kmap_types.h~eed873e2f55dcd50:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/kmap_types.h
.del-keyboard.h~3d6d63ef29bf066c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/keyboard.h
.del-kdbprivate.h~8d8ff2e38b419e4c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/kdbprivate.h
.del-kdb.h~1981de7db9b5d353:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/kdb.h
.del-irq.h~4702eca4cd45e793:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/irq.h
.del-ipcbuf.h~f3ed215ace7ac98f:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ipcbuf.h
.del-ipc.h~8e9498e43aadf144:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ipc.h
.del-ioctls.h~263229b882e93cfd:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctls.h
.del-ioctl.h~bac00725b5ef0269:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctl.h
.del-io_apic.h~d3ebb23a7540d727:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/io_apic.h
.del-io.h~28def6bcf143a288:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/io.h
.del-init.h~f94c9cf325ec8a73:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/init.h
.del-ide.h~1f18b51858f7de58:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/ide.h
.del-i387.h~a09953497f47e974:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/i387.h
.del-hypervisor.h~d2b860c8a01e7b7d:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h
.del-hypervisor-ifs~7df8ec9215cf9987:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs
.del-hw_irq.h~85b1e98ab3922232:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/hw_irq.h
.del-highmem.h~961c664eb3006cf6:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/highmem.h
.del-hdreg.h~af3fea048084de8c:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/hdreg.h
.del-hardirq.h~b78749db9e13d06:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/hardirq.h
.del-floppy.h~fc1f18b688d0a155:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/floppy.h
.del-fixmap.h~63fec5045e83d303:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/fixmap.h
.del-fcntl.h~5e345023494b641:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/fcntl.h
.del-errno.h~2d307a9167d276be:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/errno.h
.del-elf.h~5b4118314cd7dda8:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/elf.h
.del-dma.h~bfdf9bdb575308fb:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/dma.h
.del-div64.h~e6438de5f5adcdad:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/div64.h
.del-desc.h~b339bfef4b0848b3:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/desc.h
.del-delay.h~4f5c1f98fef9f480:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/delay.h
.del-debugreg.h~94ad0b2f7ce81945:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/debugreg.h
.del-current.h~4693f192fd42b4a6:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/current.h
.del-cpufeature.h~9ee68ee4f8b525fd:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/cpufeature.h
.del-checksum.h~db4bcfc8958c5d3f:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/checksum.h
.del-cache.h~64626a79a0712d70:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/cache.h
.del-byteorder.h~404697d4e47c3345:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/byteorder.h
.del-bugs.h~df29bf2b4f74ccaf:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/bugs.h
.del-boot.h~c7462d481f4a9:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/boot.h
.del-bitops.h~ef7ea34f8a17ed86:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/bitops.h
.del-atomic.h~55cde2d93d09526:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/atomic.h
.del-apicdef.h~4ce7611333e9d1fc:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/apicdef.h
.del-usercopy.c~b60ef441a832ff84:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/usercopy.c
.del-tty_io.c~b7ee058bd0b4d969:
  Delete: old/xenolinux-2.4.16-sparse/drivers/char/tty_io.c
.del-traps.c~58f6978ca3914806:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/traps.c
.del-time.c~8772141ba7a5b7be:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/time.c
.del-sys_i386.c~f84bd504c2085dda:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/sys_i386.c
.del-strstr.c~e80f16ebdccc4062:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/strstr.c
.del-signal.c~45454d7374cce0a1:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/signal.c
.del-setup.c~6f22e121db6f1bc:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/setup.c
.del-semaphore.c~3e7a2194beb1c8e4:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/semaphore.c
.del-rd.c~99ae381b254bd356:
  Delete: old/xenolinux-2.4.16-sparse/drivers/block/rd.c
.del-ptrace.c~8cb5d0b722ab58b9:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ptrace.c
.del-process.c~ab23652fb4106ce3:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/process.c
.del-old-checksum.c~c3dfe224f68ed131:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/old-checksum.c
.del-mmx.c~3f27e7b4c5f3d68d:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/mmx.c
.del-mmu_context.c~ef75b8e1f894e729:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/mmu_context.c
.del-memcpy.c~91d0cb7e4e922f6e:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/memcpy.c
.del-ll_rw_blk.c~2c64b7fc36db523:
  Delete: old/xenolinux-2.4.16-sparse/drivers/block/ll_rw_blk.c
.del-ldt.c~102d26cc1b63c830:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ldt.c
.del-irq.c~2bd9b09d889fd6b8:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/irq.c
.del-ioport.c~2d86d4fbba2e2583:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ioport.c
.del-iodebug.c~982cc58799104651:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/iodebug.c
.del-init_task.c~53258077ed40d6be:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/init_task.c
.del-init.c~3693c99014d6fc0d:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c
.del-i387.c~571a2fa27676375:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i387.c
.del-i386_ksyms.c~68a55ed15a69598:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i386_ksyms.c
.del-hypervisor.c~a227c7d0b6a5fd42:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/hypervisor.c
.del-getuser.S~1ef189b582390381:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/getuser.S
.del-get_unmapped_area.c~3ad7561469aabec:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/get_unmapped_area.c
.del-fault.c~4f5a4a1859484525:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/fault.c
.del-extable.c~b98087717f427f26:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/extable.c
.del-exec.c~2557f6564ffdb2e0:
  Delete: old/xenolinux-2.4.16-sparse/fs/exec.c
.del-delay.c~bddd92dcfafdf5ce:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/delay.c
.del-dec_and_lock.c~5ac45f1c3a6593c:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/dec_and_lock.c
.del-checksum.S~be8f8ce2d8964249:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/checksum.S
.del-apic.h~7e52954d00c0c4f:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/apic.h
.del-a.out.h~7ace48e4361e6b64:
  Delete: old/xenolinux-2.4.16-sparse/include/asm-xeno/a.out.h
.del-Makefile~92a08e51252c8752:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/lib/Makefile
.del-Makefile~4b457be6621a5d5a:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/mm/Makefile
.del-Config.in~e79aa726643e8d8f:
  Delete: old/xenolinux-2.4.16-sparse/drivers/block/Config.in
.del-xl_block_test.c~aac5669d8f638637:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block_test.c
.del-xl_block.c~cee1f87e3b5f99a:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
.del-vmlinux.lds~95fa124a7440e17f:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/vmlinux.lds
.del-vfr.c~32830c0144380827:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/vfr.c
.del-network.c~cc961aaabe0a0a77:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/network.c
.del-mk~196fb97e64c3e303:
  Delete: old/xenolinux-2.4.16-sparse/mk
.del-hypervisor.c~78a3960ab18cdbd5:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/hypervisor.c
.del-head.S~7976f74358c43bf7:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S
.del-entry.S~126fc1af28caab2f:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/entry.S
.del-dom0_ops.h~ebc6f2ba40efd4f8:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_ops.h
.del-dom0_memory.c~89a290b73b42dafb:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_memory.c
.del-dom0_core.c~b6447635a1dff297:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_core.c
.del-dom0_block.c~56aa20e79fb98f4a:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_block.c
.del-defconfig~4e50d7fc220d1aab:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/defconfig
.del-console.c~de0ee868d96d8dbe:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/console.c
.del-config.in~4afe788e4691d222:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/config.in
.del-Makefile~fda4420ca7a5c777:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/Makefile
.del-Makefile~d7ea62ca90003f31:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/boot/Makefile
.del-Makefile~c6614e5f6a40fe8:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/Makefile
.del-Makefile~8f946627850d08:
  Delete: old/xenolinux-2.4.16-sparse/Makefile
.del-Makefile~4b0def0c8c803698:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/Makefile
.del-Makefile~40bc4fd761c2e3e4:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/Makefile
.del-Makefile~225ee771b0fb73fa:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/kernel/Makefile
.del-Makefile~1d57425ac7aac33:
  Delete: old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/Makefile

177 files changed:
.bk-to-hg
.hg-to-bk
.rootkeys
old/xenolinux-2.4.16-sparse/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/boot/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/config.in [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/defconfig [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block_test.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/console.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_block.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_core.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_memory.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_ops.h [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/vfr.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/network.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/entry.S [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/hypervisor.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i386_ksyms.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i387.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/init_task.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ioport.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/irq.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ldt.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/process.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ptrace.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/semaphore.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/setup.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/signal.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/sys_i386.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/time.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/kernel/traps.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/checksum.S [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/dec_and_lock.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/delay.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/getuser.S [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/iodebug.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/memcpy.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/mmx.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/old-checksum.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/strstr.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/lib/usercopy.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/Makefile [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/extable.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/fault.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/get_unmapped_area.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/hypervisor.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/mm/mmu_context.c [deleted file]
old/xenolinux-2.4.16-sparse/arch/xeno/vmlinux.lds [deleted file]
old/xenolinux-2.4.16-sparse/drivers/block/Config.in [deleted file]
old/xenolinux-2.4.16-sparse/drivers/block/ll_rw_blk.c [deleted file]
old/xenolinux-2.4.16-sparse/drivers/block/rd.c [deleted file]
old/xenolinux-2.4.16-sparse/drivers/char/tty_io.c [deleted file]
old/xenolinux-2.4.16-sparse/fs/exec.c [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/a.out.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/apic.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/apicdef.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/atomic.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/bitops.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/boot.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/bugs.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/byteorder.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/cache.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/checksum.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/cpufeature.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/current.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/debugreg.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/delay.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/desc.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/div64.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/dma.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/elf.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/errno.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/fcntl.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/fixmap.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/floppy.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/hardirq.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/hdreg.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/highmem.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/hw_irq.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/i387.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ide.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/init.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/io.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/io_apic.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctl.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctls.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ipc.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ipcbuf.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/irq.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/kdb.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/kdbprivate.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/keyboard.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/kmap_types.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ldt.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/linux_logo.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/locks.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/math_emu.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mc146818rtc.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mca_dma.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mman.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu_context.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mmx.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/module.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mpspec.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/msgbuf.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/msr.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/mtrr.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/namei.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/page.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/param.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/parport.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/pgalloc.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-2level.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-3level.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/poll.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/posix_types.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/processor.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ptrace.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/resource.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/rwlock.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/rwsem.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/scatterlist.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/segment.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/semaphore.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/sembuf.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/serial.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/setup.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/shmbuf.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/shmparam.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/sigcontext.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/siginfo.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/signal.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/smp.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/smplock.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/socket.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/sockios.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/softirq.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/spinlock.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/stat.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/statfs.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/string-486.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/string.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/system.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/termbits.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/termios.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/timex.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/tlb.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/types.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/uaccess.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/ucontext.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/unaligned.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/unistd.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/user.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/vga.h [deleted file]
old/xenolinux-2.4.16-sparse/include/asm-xeno/xor.h [deleted file]
old/xenolinux-2.4.16-sparse/include/linux/blk.h [deleted file]
old/xenolinux-2.4.16-sparse/include/linux/major.h [deleted file]
old/xenolinux-2.4.16-sparse/include/linux/sunrpc/debug.h [deleted file]
old/xenolinux-2.4.16-sparse/init/main.c [deleted file]
old/xenolinux-2.4.16-sparse/kernel/panic.c [deleted file]
old/xenolinux-2.4.16-sparse/mk [deleted file]
old/xenolinux-2.4.16-sparse/mm/memory.c [deleted file]
old/xenolinux-2.4.16-sparse/mm/mremap.c [deleted file]
old/xenolinux-2.4.16-sparse/mm/swapfile.c [deleted file]

index 5bd381ab73b75967e65d958273f0b6f60e4299c6..1d83a2cea7a1381f7f984f71aaa8137d0f9259e7 100755 (executable)
--- a/.bk-to-hg
+++ b/.bk-to-hg
@@ -1,7 +1,5 @@
 #!/bin/sh -x
 set -e
-test -L old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs
-rm      old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs
 test -L tools/domain_builder/dom0_ops.h
 rm      tools/domain_builder/dom0_ops.h
 (find -depth -type d -print | xargs -r rmdir 2>/dev/null) || true
index dc30e753161763c1bd3b02ece364a500bc29ea7a..9c6992a3202885d7d4747b5ae5eaec5d3d01e04d 100755 (executable)
--- a/.hg-to-bk
+++ b/.hg-to-bk
@@ -1,10 +1,5 @@
 #!/bin/sh -x
 set -e
-mkdir -p old
-mkdir -p old/xenolinux-2.4.16-sparse
-mkdir -p old/xenolinux-2.4.16-sparse/include
-mkdir -p old/xenolinux-2.4.16-sparse/include/asm-xeno
-ln -s ../../../xen-2.4.16/include/hypervisor-ifs old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs
 mkdir -p tools
 mkdir -p tools/domain_builder
 ln -s ../../xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_ops.h tools/domain_builder/dom0_ops.h
index b7847b12df8dedb7c84454ea90c526faecfa678d..5cfbe6a9aab33aa74f4359a5385ede5dfbf512d1 100644 (file)
--- a/.rootkeys
+++ b/.rootkeys
@@ -1,181 +1,6 @@
 3ddb6b0bKlMz_dz-M59a1mkUa1lASw BitKeeper/etc/config
 3ddb6b0buTaC5zg1_a8FoAR9FWi_mw BitKeeper/etc/ignore
 3ddb79c9_hgSp-gsQm8HqWM_9W3B_A BitKeeper/etc/logging_ok
-3ddb79bbYMXGmQTsr5BeGS_RuZ5f_w old/xenolinux-2.4.16-sparse/Makefile
-3ddb79b7e0ssyz3Q1GoqjDds-x1PLQ old/xenolinux-2.4.16-sparse/arch/xeno/Makefile
-3ddb79b7_rLvYZU3tOY6Wwuw_Sg3_w old/xenolinux-2.4.16-sparse/arch/xeno/boot/Makefile
-3ddb79b8L4xnwrcvWk6nAbgKVbNkSA old/xenolinux-2.4.16-sparse/arch/xeno/config.in
-3ddb79b7v_Be34as7_mlzFlw65hOjQ old/xenolinux-2.4.16-sparse/arch/xeno/defconfig
-3ddb79b7KUvtx0knQJoRaBDZQeNidg old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/Makefile
-3e4a8cb7JECr--r1ipnrkd7NKdbUqQ old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
-3e4a8cb7SLWsLTXQjv7ng6-3hL4pCA old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block_test.c
-3ddb79b7LLVJBGynxHSOh9A9l97sug old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/Makefile
-3ddb79b7UG2QiRAU-Wvc1Y_BLigu1Q old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/console.c
-3ddb79b75eo4PRXkT6Th9popt_SJhg old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/Makefile
-3e4a8cb79dT0F4q5T4GEqMj4CtAquQ old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_block.c
-3ddb79b7Xyaoep6U0kLvx6Kx7OauDw old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_core.c
-3df9ce13K7qSLBtHV-01QHPW62649Q old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_memory.c
-3ddb79b7PulSkF9m3c7K5MkxHRf4hA old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_ops.h
-3ddba759XOjcl_OF-52dOYq7sgMykQ old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/vfr.c
-3ddb79b7s7yYBioHidSkIoHtQxYmOw old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/Makefile
-3ddb79b7CpLL98ScdpbKkVBktlbCtQ old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/network.c
-3ddb79b7hqi9krq6h98lnpONHGzvEA old/xenolinux-2.4.16-sparse/arch/xeno/kernel/Makefile
-3ddb79b7eyEv5bsN8EQkjIG0y11Q1A old/xenolinux-2.4.16-sparse/arch/xeno/kernel/entry.S
-3ddb79b70XAg9bJwp0-DWHe0LtzlBw old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S
-3ddb79b7dDsKjU22VxQ-C5BMFaMUmw old/xenolinux-2.4.16-sparse/arch/xeno/kernel/hypervisor.c
-3ddb79b7xzwEc8-lo1vu3BxB-gBURQ old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i386_ksyms.c
-3ddb79b7i7pfPEcy_zjDfW9JHD305g old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i387.c
-3ddb79b7Ti2i5ztQzM-w67zN-cJD8A old/xenolinux-2.4.16-sparse/arch/xeno/kernel/init_task.c
-3ddb79b7MEQGMZrsF94atNJZ4-OGzA old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ioport.c
-3ddb79b7DOz-Mz5jsjRd5W8jN0XbPw old/xenolinux-2.4.16-sparse/arch/xeno/kernel/irq.c
-3ddb79b7bOAPk_YAUUsruhVGO2GOOg old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ldt.c
-3ddb79b7qf2WK6vMKcmOLIeKN5GSjg old/xenolinux-2.4.16-sparse/arch/xeno/kernel/process.c
-3ddb79b7HdaBR7yk_u51auihbr31aQ old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ptrace.c
-3ddb79b7yJunvnrgWD2VTy6yot0PMg old/xenolinux-2.4.16-sparse/arch/xeno/kernel/semaphore.c
-3ddb79b7BIitpVygiksiMBQYvh5Z2A old/xenolinux-2.4.16-sparse/arch/xeno/kernel/setup.c
-3ddb79b7DTevmwhNla67jZxjBSIKFg old/xenolinux-2.4.16-sparse/arch/xeno/kernel/signal.c
-3ddb79b76mCf-gZPR4KLjL8ktZ37GA old/xenolinux-2.4.16-sparse/arch/xeno/kernel/sys_i386.c
-3ddb79b7xDsEKErRFeqcSm6eRrTEIg old/xenolinux-2.4.16-sparse/arch/xeno/kernel/time.c
-3ddb79b7V4dv_KAQu4Msa2Ebhd0aKw old/xenolinux-2.4.16-sparse/arch/xeno/kernel/traps.c
-3ddb79b8oUnwncDaZuRWF3-n3jPsIA old/xenolinux-2.4.16-sparse/arch/xeno/lib/Makefile
-3ddb79b8BMxi8qW3_NT44SSd1uMD3Q old/xenolinux-2.4.16-sparse/arch/xeno/lib/checksum.S
-3ddb79b8WcWel2g9zU9pBJb-yA8jBw old/xenolinux-2.4.16-sparse/arch/xeno/lib/dec_and_lock.c
-3ddb79b8oxeiaIW6Au95OM0GlsMrMw old/xenolinux-2.4.16-sparse/arch/xeno/lib/delay.c
-3ddb79b8XPasnRhvK-_6xYksf3S6qA old/xenolinux-2.4.16-sparse/arch/xeno/lib/getuser.S
-3ddb79b8HFLUh8mwcl4X44ta-ny1KA old/xenolinux-2.4.16-sparse/arch/xeno/lib/iodebug.c
-3ddb79b879qeoLlarHXvNIDEva6ssA old/xenolinux-2.4.16-sparse/arch/xeno/lib/memcpy.c
-3ddb79b869CY_yr4HymV6k98pfpMgg old/xenolinux-2.4.16-sparse/arch/xeno/lib/mmx.c
-3ddb79b8S77yf1--Qa4C0ZYmqKXCww old/xenolinux-2.4.16-sparse/arch/xeno/lib/old-checksum.c
-3ddb79b8ffZ79cU2ZzfA2ekeo6pqeg old/xenolinux-2.4.16-sparse/arch/xeno/lib/strstr.c
-3ddb79b82kQ5oIXpxq3TUmlgxsLzLg old/xenolinux-2.4.16-sparse/arch/xeno/lib/usercopy.c
-3ddb79b8qdD_svLCCAja_oP2w4Tn8Q old/xenolinux-2.4.16-sparse/arch/xeno/mm/Makefile
-3ddb79b8ukY8dsPYmR8eNk-aCzFPsQ old/xenolinux-2.4.16-sparse/arch/xeno/mm/extable.c
-3ddb79b856Zta9b3s0bgUCGbG1blvQ old/xenolinux-2.4.16-sparse/arch/xeno/mm/fault.c
-3df9ce13dZ6UGDjZbUeZfyH4Hy6aCA old/xenolinux-2.4.16-sparse/arch/xeno/mm/get_unmapped_area.c
-3ddb79b85fpsKT8A9WYnuJg03b715g old/xenolinux-2.4.16-sparse/arch/xeno/mm/hypervisor.c
-3ddb79b83Zj7Xn2QVhU4HeMuAC9FjA old/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c
-3df9ce13TRWIv0Mawm15zESP7jcT7A old/xenolinux-2.4.16-sparse/arch/xeno/mm/mmu_context.c
-3ddb79b7aKdTkbr3u6aze8tVwGh_TQ old/xenolinux-2.4.16-sparse/arch/xeno/vmlinux.lds
-3e4a8cb7lpFFwT1Iu9zXWc8Ew4klFA old/xenolinux-2.4.16-sparse/drivers/block/Config.in
-3ddb79bbx682YH6vR2zbVOXwg73ULg old/xenolinux-2.4.16-sparse/drivers/block/ll_rw_blk.c
-3ddb79bcJfHdwrPsjqgI33_OsGdVCg old/xenolinux-2.4.16-sparse/drivers/block/rd.c
-3ddb79bcpVu-IbnqwQqpRqsEbLpsuw old/xenolinux-2.4.16-sparse/drivers/char/tty_io.c
-3e15d5273gfR2fbcYe05kqBSAvCX_w old/xenolinux-2.4.16-sparse/fs/exec.c
-3ddb79b8VFtfWSCrXKPN2K21zd_vtw old/xenolinux-2.4.16-sparse/include/asm-xeno/a.out.h
-3ddb79b8Zzi13p3OAPV25QgiC3THAQ old/xenolinux-2.4.16-sparse/include/asm-xeno/apic.h
-3ddb79baZDlsdV_m6C5CXnWMl15p1g old/xenolinux-2.4.16-sparse/include/asm-xeno/apicdef.h
-3ddb79baZM88u4CnriVA8ZXBdnMNvg old/xenolinux-2.4.16-sparse/include/asm-xeno/atomic.h
-3ddb79baYHyZsDCiXiq8Y8_XxHE-jQ old/xenolinux-2.4.16-sparse/include/asm-xeno/bitops.h
-3ddb79b8vFGtGb6pg3GZFXSiwOZfcg old/xenolinux-2.4.16-sparse/include/asm-xeno/boot.h
-3ddb79baW8tf6PiBQUF50QQM5nY9sw old/xenolinux-2.4.16-sparse/include/asm-xeno/bugs.h
-3ddb79b80msOlzTZRoVudYdemzgOlA old/xenolinux-2.4.16-sparse/include/asm-xeno/byteorder.h
-3ddb79b8brNSUEujnq8f_zr8kA-cUg old/xenolinux-2.4.16-sparse/include/asm-xeno/cache.h
-3ddb79bayhr6C6prVhAYlFRChhf3wg old/xenolinux-2.4.16-sparse/include/asm-xeno/checksum.h
-3ddb79b8RNUaDbpPjdVVwKAsbiTBKQ old/xenolinux-2.4.16-sparse/include/asm-xeno/cpufeature.h
-3ddb79b8pJe4aNsUKkfHEoBT9Y-UMA old/xenolinux-2.4.16-sparse/include/asm-xeno/current.h
-3ddb79b8KL7icUfxKRoWDIkHkLQ1kQ old/xenolinux-2.4.16-sparse/include/asm-xeno/debugreg.h
-3ddb79baDUP_cRdFgqaH0rXUvMxx4A old/xenolinux-2.4.16-sparse/include/asm-xeno/delay.h
-3ddb79b89CgBTFsS3joEJ1ZniSHEgA old/xenolinux-2.4.16-sparse/include/asm-xeno/desc.h
-3ddb79ba6xyT4mJOYSp1Fg2l0ta93A old/xenolinux-2.4.16-sparse/include/asm-xeno/div64.h
-3ddb79b80Z4ZUIqbD1Xu_t4OCuEHeQ old/xenolinux-2.4.16-sparse/include/asm-xeno/dma.h
-3ddb79bac26NkKcPIEsfxETc5Snyag old/xenolinux-2.4.16-sparse/include/asm-xeno/elf.h
-3ddb79ba722pCJ_g_xI8ebsE31IK-Q old/xenolinux-2.4.16-sparse/include/asm-xeno/errno.h
-3ddb79b8vIpUpgaSNEneFkg5hYSvNg old/xenolinux-2.4.16-sparse/include/asm-xeno/fcntl.h
-3e53dbfb9mmyM-y5NuBBTDJvQkDzjA old/xenolinux-2.4.16-sparse/include/asm-xeno/fixmap.h
-3ddb79b8780YvqvK1g5KPIWzQ6P15w old/xenolinux-2.4.16-sparse/include/asm-xeno/floppy.h
-3ddb79bas-nFywnmilbUeT34PEAA0g old/xenolinux-2.4.16-sparse/include/asm-xeno/hardirq.h
-3ddb79batzR40ZFY9dvgs5f1aM9I6g old/xenolinux-2.4.16-sparse/include/asm-xeno/hdreg.h
-3ddb79b90xBgbeYgCcImS2ZxJakxBA old/xenolinux-2.4.16-sparse/include/asm-xeno/highmem.h
-3ddb79baXLZV3dUKQI2gIYpAy67RuA old/xenolinux-2.4.16-sparse/include/asm-xeno/hw_irq.h
-3e00b957iYsdTI1x6THRwMoWSPIW2Q old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs
-3ddb79bapQ9Z9ewa5O1pqAVaNBTazg old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h
-3ddb79baL-pjPI8hg5xjPgd4__SlOA old/xenolinux-2.4.16-sparse/include/asm-xeno/i387.h
-3ddb79ba66TwvG7HpbBo04fRhmj3KQ old/xenolinux-2.4.16-sparse/include/asm-xeno/ide.h
-3ddb79bahFfCuRcmd9kBYA-CuGtCSg old/xenolinux-2.4.16-sparse/include/asm-xeno/init.h
-3ddb79ba3wnwflaNW6QheYvxoj5S8Q old/xenolinux-2.4.16-sparse/include/asm-xeno/io.h
-3ddb79ba1MhHpElCXFlijej2zWVk4g old/xenolinux-2.4.16-sparse/include/asm-xeno/io_apic.h
-3ddb79baiyfcZN9rJwhq0UeFjI6GkQ old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctl.h
-3ddb79badReKYSok3yHShb4jg0vA-A old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctls.h
-3ddb79b9iuIxteTXg8_myIsrWF5uxg old/xenolinux-2.4.16-sparse/include/asm-xeno/ipc.h
-3ddb79baw5Dxo78880UMSanDV70WdA old/xenolinux-2.4.16-sparse/include/asm-xeno/ipcbuf.h
-3ddb79ban9FUBuEaznRZvPfry3xnHQ old/xenolinux-2.4.16-sparse/include/asm-xeno/irq.h
-3ddb79banJ5r-mqE7LZ8nPGTADaGBA old/xenolinux-2.4.16-sparse/include/asm-xeno/kdb.h
-3ddb79baoaoHGTW0oiBXFPUg4KWydw old/xenolinux-2.4.16-sparse/include/asm-xeno/kdbprivate.h
-3ddb79bam2K6c7tS2HX6jis2Bqx71w old/xenolinux-2.4.16-sparse/include/asm-xeno/keyboard.h
-3ddb79baQ8gGrZm2Jlo3I1ntD0H5HA old/xenolinux-2.4.16-sparse/include/asm-xeno/kmap_types.h
-3ddb79b9MeQEYrafy-Mx9OoeVFM_uw old/xenolinux-2.4.16-sparse/include/asm-xeno/ldt.h
-3ddb79baAsy5W-cJ9ML_w9chqqUh4A old/xenolinux-2.4.16-sparse/include/asm-xeno/linux_logo.h
-3ddb79b9uhsumPVE0wGgarfIkYDSFA old/xenolinux-2.4.16-sparse/include/asm-xeno/locks.h
-3ddb79b954ISbF9e68hB0WTulCJRgg old/xenolinux-2.4.16-sparse/include/asm-xeno/math_emu.h
-3ddb79b9EZDlC6RGn_y0OYr0nyQWlw old/xenolinux-2.4.16-sparse/include/asm-xeno/mc146818rtc.h
-3ddb79b9M6pTF4maDgh8TYbg_HHUbw old/xenolinux-2.4.16-sparse/include/asm-xeno/mca_dma.h
-3ddb79baA7dlps8FkicOUEXKEQuQsA old/xenolinux-2.4.16-sparse/include/asm-xeno/mman.h
-3ddb79baKfF36-eRvkxnEvMRQRai-w old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu.h
-3ddb79baQyKbT5U4EmZNePY9Txp-tA old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu_context.h
-3ddb79bberC3Ghs4vy-06Pu-LSiWtw old/xenolinux-2.4.16-sparse/include/asm-xeno/mmx.h
-3ddb79bbsJLF10xQcKDoV8f_7gcOXg old/xenolinux-2.4.16-sparse/include/asm-xeno/module.h
-3ddb79bbY5RffJ8_F1oC4VI7q3Eejg old/xenolinux-2.4.16-sparse/include/asm-xeno/mpspec.h
-3ddb79b90vB4Vzzy_wL6SYXQMy9N9Q old/xenolinux-2.4.16-sparse/include/asm-xeno/msgbuf.h
-3ddb79bbZ5a_vTk0xcgOHuPokaqwMw old/xenolinux-2.4.16-sparse/include/asm-xeno/msr.h
-3ddb79b9y1xAKaPiBd79MBcCopNNYw old/xenolinux-2.4.16-sparse/include/asm-xeno/mtrr.h
-3ddb79b90hX0QBJlWQN_VsHtX5Ijkw old/xenolinux-2.4.16-sparse/include/asm-xeno/namei.h
-3ddb79bbG2p9MNq7tuISz8md1Oj2lg old/xenolinux-2.4.16-sparse/include/asm-xeno/page.h
-3ddb79bb_iUa2piFSwaB8YPw-rB5SQ old/xenolinux-2.4.16-sparse/include/asm-xeno/param.h
-3ddb79b9Y8UU0S9AoDznoqqcYxg9-A old/xenolinux-2.4.16-sparse/include/asm-xeno/parport.h
-3ddb79b9K9_edWxBHS7TdCpyDmfp6g old/xenolinux-2.4.16-sparse/include/asm-xeno/pgalloc.h
-3ddb79bahaS_P3UYp9VEU6kHxXbajA old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-2level.h
-3ddb79b9MjXUB_rk29GJgaNY24feCw old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-3level.h
-3ddb79bbPF2ENpNHBru8K3hyYVPmkQ old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable.h
-3ddb79b9t9xKrOf8aP3X5jEit9tj-w old/xenolinux-2.4.16-sparse/include/asm-xeno/poll.h
-3ddb79b9xHtTDWFaI9ncAtxyUth0Yg old/xenolinux-2.4.16-sparse/include/asm-xeno/posix_types.h
-3ddb79b9VwZ9YsSpA7CkJmYXVadrCA old/xenolinux-2.4.16-sparse/include/asm-xeno/processor.h
-3ddb79bbKaOkHrGG9j05AGlii-voaQ old/xenolinux-2.4.16-sparse/include/asm-xeno/ptrace.h
-3ddb79bbVpJCVTXmc2yNf1rsC00YEg old/xenolinux-2.4.16-sparse/include/asm-xeno/resource.h
-3ddb79bbtU0Kh27NbNpqKAIhshJvXQ old/xenolinux-2.4.16-sparse/include/asm-xeno/rwlock.h
-3ddb79b97LhdmW6hYmybQOPDkK6plg old/xenolinux-2.4.16-sparse/include/asm-xeno/rwsem.h
-3ddb79bbgRzM1NoXYbLoOCbZt8s5NA old/xenolinux-2.4.16-sparse/include/asm-xeno/scatterlist.h
-3ddb79b9xCi3F80Z6xxx6nzkCAo8vQ old/xenolinux-2.4.16-sparse/include/asm-xeno/segment.h
-3ddb79b9WxySbCKDoMgTgPtn1G3BFw old/xenolinux-2.4.16-sparse/include/asm-xeno/semaphore.h
-3ddb79b9gNK3dtgXONloSBaNgZPjAg old/xenolinux-2.4.16-sparse/include/asm-xeno/sembuf.h
-3ddb79bb2UTDgfwju2J3weDXemw3LA old/xenolinux-2.4.16-sparse/include/asm-xeno/serial.h
-3ddb79bbAPFyA_n4dNVCRoee8obOKA old/xenolinux-2.4.16-sparse/include/asm-xeno/setup.h
-3ddb79b9XTOB5DwWBGzPLLR4rNEkDQ old/xenolinux-2.4.16-sparse/include/asm-xeno/shmbuf.h
-3ddb79b9-_jDlAj3qVZe4opi3zectQ old/xenolinux-2.4.16-sparse/include/asm-xeno/shmparam.h
-3ddb79b9AW75ErwlTRX4McxO15sEaQ old/xenolinux-2.4.16-sparse/include/asm-xeno/sigcontext.h
-3ddb79b9NBJW-KAI3mgveUCr7sIOwA old/xenolinux-2.4.16-sparse/include/asm-xeno/siginfo.h
-3ddb79bbj0i8tUVNMKtZVrLJqv3Nsw old/xenolinux-2.4.16-sparse/include/asm-xeno/signal.h
-3ddb79bbfAmpotdy-No2dwGez2fnIg old/xenolinux-2.4.16-sparse/include/asm-xeno/smp.h
-3ddb79b9pDERXiqSumFWMTFJ1X9xIw old/xenolinux-2.4.16-sparse/include/asm-xeno/smplock.h
-3ddb79bbuCOIWTlWEHgOTexEBbdDow old/xenolinux-2.4.16-sparse/include/asm-xeno/socket.h
-3ddb79b9ExeUznVBlSn1e2nvOCrJ4A old/xenolinux-2.4.16-sparse/include/asm-xeno/sockios.h
-3ddb79b9kL3xvucBb-Gmg4_vo-99vw old/xenolinux-2.4.16-sparse/include/asm-xeno/softirq.h
-3ddb79b9rJ8AfSzGzA0arI8mazYLlQ old/xenolinux-2.4.16-sparse/include/asm-xeno/spinlock.h
-3ddb79bbXaA_zUHNPkAKRNz1h0gIJw old/xenolinux-2.4.16-sparse/include/asm-xeno/stat.h
-3ddb79b9G004IlCplrjWgF1aXbp8dA old/xenolinux-2.4.16-sparse/include/asm-xeno/statfs.h
-3ddb79bbRsy3GlCFrQEbVMVp--xlwQ old/xenolinux-2.4.16-sparse/include/asm-xeno/string-486.h
-3ddb79bb4xug4cDph6ODLQFQIan_sg old/xenolinux-2.4.16-sparse/include/asm-xeno/string.h
-3ddb79b9JhjJtJUO3g5LmrHPkdxgKg old/xenolinux-2.4.16-sparse/include/asm-xeno/system.h
-3ddb79b9tbjCU9zSbqKbbv4m8tijlg old/xenolinux-2.4.16-sparse/include/asm-xeno/termbits.h
-3ddb79bbi0mW10tH4xX1_KHXKM_xPg old/xenolinux-2.4.16-sparse/include/asm-xeno/termios.h
-3ddb79b9JuR1VvNzlkyMlA-Dnlmy9Q old/xenolinux-2.4.16-sparse/include/asm-xeno/timex.h
-3ddb79b9Bofq-p3sCTF0ELVuf_iBYA old/xenolinux-2.4.16-sparse/include/asm-xeno/tlb.h
-3ddb79b9tpBUqS8-S6euSqyk2hFkKg old/xenolinux-2.4.16-sparse/include/asm-xeno/types.h
-3ddb79bb5bkAaEzD7pdqQZdWyA_0eQ old/xenolinux-2.4.16-sparse/include/asm-xeno/uaccess.h
-3ddb79bbiDIz1dxgFixHKyGuqRqfDQ old/xenolinux-2.4.16-sparse/include/asm-xeno/ucontext.h
-3ddb79ba_Smn-GiYtr5ZTMaZXn-AHg old/xenolinux-2.4.16-sparse/include/asm-xeno/unaligned.h
-3ddb79bb3cMSs_k2X5Oq2hOIBvmPYA old/xenolinux-2.4.16-sparse/include/asm-xeno/unistd.h
-3ddb79ba2qYtIQAT_-vCFkkZUXu_UQ old/xenolinux-2.4.16-sparse/include/asm-xeno/user.h
-3ddb79bbqhb9X9qWOz5Bv4wOzrkITg old/xenolinux-2.4.16-sparse/include/asm-xeno/vga.h
-3ddb79bbA52x94o6uwDYsbzrH2hjzA old/xenolinux-2.4.16-sparse/include/asm-xeno/xor.h
-3e4a8cb7ON8EclY3NN3YPXyMT941hA old/xenolinux-2.4.16-sparse/include/linux/blk.h
-3e4a8cb7GJrKD0z7EF0VZOhdEa01Mw old/xenolinux-2.4.16-sparse/include/linux/major.h
-3ddb79bb_7YG4U75ZmEic9YXWTW7Vw old/xenolinux-2.4.16-sparse/include/linux/sunrpc/debug.h
-3e4a8cb7j05wwb1uPZgY16s68o7qAw old/xenolinux-2.4.16-sparse/init/main.c
-3ddb79bcxkVPfWlZ1PQKvDrfArzOVw old/xenolinux-2.4.16-sparse/kernel/panic.c
-3ddb79bbP31im-mx2NbfthSeqty1Dg old/xenolinux-2.4.16-sparse/mk
-3e15d52e0_j129JPvo7xfYGndVFpwQ old/xenolinux-2.4.16-sparse/mm/memory.c
-3e15d535DLvpzTrLRUIerB69LpJD1g old/xenolinux-2.4.16-sparse/mm/mremap.c
-3e15d531m1Y1_W8ki64AFOU_ua4C4w old/xenolinux-2.4.16-sparse/mm/swapfile.c
 3e6377b24eQqYMsDi9XrFkIgTzZ47A tools/balloon/Makefile
 3e6377d6eiFjF1hHIS6JEIOFk62xSA tools/balloon/README
 3e6377dbGcgnisKw16DPCaND7oGO3Q tools/balloon/balloon.c
diff --git a/old/xenolinux-2.4.16-sparse/Makefile b/old/xenolinux-2.4.16-sparse/Makefile
deleted file mode 100644 (file)
index fc6d0a2..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-VERSION = 2
-PATCHLEVEL = 4
-SUBLEVEL = 16
-EXTRAVERSION = -kdb-xeno
-
-KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
-
-HW_ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-ifndef ARCH
-ARCH := $(HW_ARCH)
-endif
-
-ARCH=xeno
-
-KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//")
-
-CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
-         else if [ -x /bin/bash ]; then echo /bin/bash; \
-         else echo sh; fi ; fi)
-TOPDIR := $(shell /bin/pwd)
-
-HPATH          = $(TOPDIR)/include
-FINDHPATH      = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net
-
-HOSTCC         = gcc
-HOSTCFLAGS     = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
-
-CROSS_COMPILE  = 
-
-#
-# Include the make variables (CC, etc...)
-#
-
-AS             = $(CROSS_COMPILE)as
-LD             = $(CROSS_COMPILE)ld
-CC             = $(CROSS_COMPILE)gcc
-CPP            = $(CC) -E
-AR             = $(CROSS_COMPILE)ar
-NM             = $(CROSS_COMPILE)nm
-STRIP          = $(CROSS_COMPILE)strip
-OBJCOPY                = $(CROSS_COMPILE)objcopy
-OBJDUMP                = $(CROSS_COMPILE)objdump
-MAKEFILES      = $(TOPDIR)/.config
-GENKSYMS       = /sbin/genksyms
-DEPMOD         = /sbin/depmod
-KALLSYMS       = /sbin/kallsyms
-MODFLAGS       = -DMODULE
-CFLAGS_KERNEL  =
-PERL           = perl
-AWK            = awk
-TMPPREFIX      =
-
-export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
-       CONFIG_SHELL TOPDIR HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
-       CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS MODFLAGS PERL AWK
-
-all:   do-it-all
-
-#
-# Make "config" the default target if there is no configuration file or
-# "depend" the target if there is no top-level dependency information.
-#
-
-ifeq (.config,$(wildcard .config))
-include .config
-ifeq (.depend,$(wildcard .depend))
-include .depend
-do-it-all:     Version vmlinux
-else
-CONFIGURATION = depend
-do-it-all:     depend
-endif
-else
-CONFIGURATION = config
-do-it-all:     config
-endif
-
-#
-# INSTALL_PATH specifies where to place the updated kernel and system map
-# images.  Uncomment if you want to place them anywhere other than root.
-#
-
-#export        INSTALL_PATH=/boot
-
-#
-# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
-# relocations required by build roots.  This is not defined in the
-# makefile but the arguement can be passed to make if needed.
-#
-
-MODLIB := $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
-export MODLIB
-
-#
-# standard CFLAGS
-#
-
-CPPFLAGS := -D__KERNEL__ -I$(HPATH)
-CPPFLAGS += $(patsubst %,-I%,$(CROSS_COMPILE_INC))
-
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
-         -fno-strict-aliasing -fno-common
-ifndef CONFIG_FRAME_POINTER
-CFLAGS += -fomit-frame-pointer
-endif
-AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
-
-#
-# ROOT_DEV specifies the default root-device when making the image.
-# This can be either FLOPPY, CURRENT, /dev/xxxx or empty, in which case
-# the default of FLOPPY is used by 'build'.
-# This is i386 specific.
-#
-
-export ROOT_DEV = CURRENT
-
-#
-# If you want to preset the SVGA mode, uncomment the next line and
-# set SVGA_MODE to whatever number you want.
-# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode.
-# The number is the same as you would ordinarily press at bootup.
-# This is i386 specific.
-#
-
-export SVGA_MODE = -DSVGA_MODE=NORMAL_VGA
-
-#
-# If you want the RAM disk device, define this to be the size in blocks.
-# This is i386 specific.
-#
-
-#export RAMDISK = -DRAMDISK=512
-
-CORE_FILES     =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o
-NETWORKS       =net/network.o
-
-LIBS           =$(TOPDIR)/lib/lib.a
-SUBDIRS                =kernel drivers mm fs net ipc lib
-
-ifeq ($(CONFIG_KDB),y)
-CORE_FILES     += kdb/kdb.o
-SUBDIRS                += kdb
-endif
-
-DRIVERS-n :=
-DRIVERS-y :=
-DRIVERS-m :=
-DRIVERS-  :=
-
-DRIVERS-$(CONFIG_ACPI) += drivers/acpi/acpi.o
-DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o
-DRIVERS-y += drivers/char/char.o \
-       drivers/block/block.o \
-       drivers/misc/misc.o \
-       drivers/net/net.o \
-       drivers/media/media.o
-DRIVERS-$(CONFIG_AGP) += drivers/char/agp/agp.o
-DRIVERS-$(CONFIG_DRM) += drivers/char/drm/drm.o
-DRIVERS-$(CONFIG_NUBUS) += drivers/nubus/nubus.a
-DRIVERS-$(CONFIG_ISDN) += drivers/isdn/isdn.a
-DRIVERS-$(CONFIG_NET_FC) += drivers/net/fc/fc.o
-DRIVERS-$(CONFIG_APPLETALK) += drivers/net/appletalk/appletalk.o
-DRIVERS-$(CONFIG_TR) += drivers/net/tokenring/tr.o
-DRIVERS-$(CONFIG_WAN) += drivers/net/wan/wan.o
-DRIVERS-$(CONFIG_ARCNET) += drivers/net/arcnet/arcnetdrv.o
-DRIVERS-$(CONFIG_ATM) += drivers/atm/atm.o
-DRIVERS-$(CONFIG_IDE) += drivers/ide/idedriver.o
-DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
-DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsidrv.o
-DRIVERS-$(CONFIG_FUSION_BOOT) += drivers/message/fusion/fusion.o
-DRIVERS-$(CONFIG_IEEE1394) += drivers/ieee1394/ieee1394drv.o
-
-ifneq ($(CONFIG_CD_NO_IDESCSI)$(CONFIG_BLK_DEV_IDECD)$(CONFIG_BLK_DEV_SR)$(CONFIG_PARIDE_PCD),)
-DRIVERS-y += drivers/cdrom/driver.o
-endif
-
-DRIVERS-$(CONFIG_SOUND) += drivers/sound/sounddrivers.o
-DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
-DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
-DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
-DRIVERS-$(CONFIG_NET_PCMCIA) += drivers/net/pcmcia/pcmcia_net.o
-DRIVERS-$(CONFIG_NET_WIRELESS) += drivers/net/wireless/wireless_net.o
-DRIVERS-$(CONFIG_PCMCIA_CHRDEV) += drivers/char/pcmcia/pcmcia_char.o
-DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
-DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o
-DRIVERS-$(CONFIG_ZORRO) += drivers/zorro/driver.o
-DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
-DRIVERS-$(CONFIG_ALL_PPC) += drivers/macintosh/macintosh.o
-DRIVERS-$(CONFIG_MAC) += drivers/macintosh/macintosh.o
-DRIVERS-$(CONFIG_ISAPNP) += drivers/pnp/pnp.o
-DRIVERS-$(CONFIG_SGI_IP22) += drivers/sgi/sgi.a
-DRIVERS-$(CONFIG_VT) += drivers/video/video.o
-DRIVERS-$(CONFIG_PARIDE) += drivers/block/paride/paride.a
-DRIVERS-$(CONFIG_HAMRADIO) += drivers/net/hamradio/hamradio.o
-DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a
-DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o
-DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o
-DRIVERS-$(CONFIG_I2O) += drivers/message/i2o/i2o.o
-DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o
-DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
-DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
-DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
-DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
-DRIVERS-$(CONFIG_HOTPLUG_PCI) += drivers/hotplug/vmlinux-obj.o
-
-DRIVERS := $(DRIVERS-y)
-
-
-# files removed with 'make clean'
-CLEAN_FILES = \
-       kernel/ksyms.lst include/linux/compile.h \
-       vmlinux System.map \
-       $(TMPPREFIX).tmp* \
-       drivers/char/consolemap_deftbl.c drivers/video/promcon_tbl.c \
-       drivers/char/conmakehash \
-       drivers/char/drm/*-mod.c \
-       drivers/pci/devlist.h drivers/pci/classlist.h drivers/pci/gen-devlist \
-       drivers/zorro/devlist.h drivers/zorro/gen-devlist \
-       drivers/sound/bin2hex drivers/sound/hex2hex \
-       drivers/atm/fore200e_mkfirm drivers/atm/{pca,sba}*{.bin,.bin1,.bin2} \
-       drivers/scsi/aic7xxx/aicasm/aicasm_gram.c \
-       drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \
-       drivers/scsi/aic7xxx/aicasm/y.tab.h \
-       drivers/scsi/aic7xxx/aicasm/aicasm \
-       drivers/scsi/53c700-mem.c \
-       net/khttpd/make_times_h \
-       net/khttpd/times.h \
-       submenu*
-# directories removed with 'make clean'
-CLEAN_DIRS = \
-       modules
-
-# files removed with 'make mrproper'
-MRPROPER_FILES = \
-       include/linux/autoconf.h include/linux/version.h \
-       drivers/net/hamradio/soundmodem/sm_tbl_{afsk1200,afsk2666,fsk9600}.h \
-       drivers/net/hamradio/soundmodem/sm_tbl_{hapn4800,psk4800}.h \
-       drivers/net/hamradio/soundmodem/sm_tbl_{afsk2400_7,afsk2400_8}.h \
-       drivers/net/hamradio/soundmodem/gentbl \
-       drivers/sound/*_boot.h drivers/sound/.*.boot \
-       drivers/sound/msndinit.c \
-       drivers/sound/msndperm.c \
-       drivers/sound/pndsperm.c \
-       drivers/sound/pndspini.c \
-       drivers/atm/fore200e_*_fw.c drivers/atm/.fore200e_*.fw \
-       .version .config* config.in config.old \
-       scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp \
-       scripts/lxdialog/*.o scripts/lxdialog/lxdialog \
-       .menuconfig.log \
-       include/asm \
-       kdb/gen-kdb_cmds.c \
-       .hdepend scripts/mkdep scripts/split-include scripts/docproc \
-       $(TOPDIR)/include/linux/modversions.h \
-       kernel.spec
-
-# directories removed with 'make mrproper'
-MRPROPER_DIRS = \
-       include/config \
-       $(TOPDIR)/include/linux/modules
-
-
-include arch/$(ARCH)/Makefile
-
-export CPPFLAGS CFLAGS CFLAGS_KERNEL AFLAGS AFLAGS_KERNEL
-
-export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS
-
-.S.s:
-       $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -o $*.s $<
-.S.o:
-       $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -c -o $*.o $<
-
-Version: dummy
-       @rm -f include/linux/compile.h
-
-boot: vmlinux
-       @$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C arch/$(ARCH)/boot
-
-LD_VMLINUX     := $(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o \
-                       --start-group \
-                       $(CORE_FILES) \
-                       $(DRIVERS) \
-                       $(NETWORKS) \
-                       $(LIBS) \
-                       --end-group
-ifeq ($(CONFIG_KALLSYMS),y)
-LD_VMLINUX_KALLSYMS    := $(TMPPREFIX).tmp_kallsyms3.o
-else
-LD_VMLINUX_KALLSYMS    :=
-endif
-
-vmlinux: include/linux/version.h $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
-       @$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" kallsyms
-
-.PHONY:        kallsyms
-
-kallsyms:
-ifeq ($(CONFIG_KALLSYMS),y)
-       @echo kallsyms pass 1
-       $(LD_VMLINUX) -o $(TMPPREFIX).tmp_vmlinux1
-       @$(KALLSYMS) $(TMPPREFIX).tmp_vmlinux1 > $(TMPPREFIX).tmp_kallsyms1.o
-       @echo kallsyms pass 2
-       @$(LD_VMLINUX) $(TMPPREFIX).tmp_kallsyms1.o -o $(TMPPREFIX).tmp_vmlinux2
-       @$(KALLSYMS) $(TMPPREFIX).tmp_vmlinux2 > $(TMPPREFIX).tmp_kallsyms2.o
-       @echo kallsyms pass 3
-       @$(LD_VMLINUX) $(TMPPREFIX).tmp_kallsyms2.o -o $(TMPPREFIX).tmp_vmlinux3
-       @$(KALLSYMS) $(TMPPREFIX).tmp_vmlinux3 > $(TMPPREFIX).tmp_kallsyms3.o
-endif
-       $(LD_VMLINUX) $(LD_VMLINUX_KALLSYMS) -o $(TMPPREFIX)vmlinux
-ifneq ($(TMPPREFIX),)
-       mv $(TMPPREFIX)vmlinux vmlinux
-endif
-       $(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
-       @rm -f $(TMPPREFIX).tmp_vmlinux* $(TMPPREFIX).tmp_kallsyms*
-
-symlinks:
-       rm -f include/asm
-       ( cd include ; ln -sf asm-$(ARCH) asm)
-       @if [ ! -d include/linux/modules ]; then \
-               mkdir include/linux/modules; \
-       fi
-
-oldconfig: symlinks
-       $(CONFIG_SHELL) scripts/Configure -d arch/$(ARCH)/config.in
-
-xconfig: symlinks
-       $(MAKE) -C scripts kconfig.tk
-       wish -f scripts/kconfig.tk
-
-menuconfig: include/linux/version.h symlinks
-       $(MAKE) -C scripts/lxdialog all
-       $(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in
-
-config: symlinks
-       $(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
-
-include/config/MARKER: scripts/split-include include/linux/autoconf.h
-       scripts/split-include include/linux/autoconf.h include/config
-       @ touch include/config/MARKER
-
-linuxsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))
-
-$(patsubst %, _dir_%, $(SUBDIRS)) : dummy include/linux/version.h include/config/MARKER
-       $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C $(patsubst _dir_%, %, $@)
-
-$(TOPDIR)/include/linux/version.h: include/linux/version.h
-$(TOPDIR)/include/linux/compile.h: include/linux/compile.h
-
-newversion:
-       . scripts/mkversion > .tmpversion
-       @mv -f .tmpversion .version
-
-include/linux/compile.h: $(CONFIGURATION) include/linux/version.h newversion
-       @echo -n \#define UTS_VERSION \"\#`cat .version` > .ver
-       @if [ -n "$(CONFIG_SMP)" ] ; then echo -n " SMP" >> .ver; fi
-       @if [ -f .name ]; then  echo -n \-`cat .name` >> .ver; fi
-       @echo ' '`date`'"' >> .ver
-       @echo \#define LINUX_COMPILE_TIME \"`date +%T`\" >> .ver
-       @echo \#define LINUX_COMPILE_BY \"`whoami`\" >> .ver
-       @echo \#define LINUX_COMPILE_HOST \"`hostname`\" >> .ver
-       @if [ -x /bin/dnsdomainname ]; then \
-          echo \#define LINUX_COMPILE_DOMAIN \"`dnsdomainname`\"; \
-        elif [ -x /bin/domainname ]; then \
-          echo \#define LINUX_COMPILE_DOMAIN \"`domainname`\"; \
-        else \
-          echo \#define LINUX_COMPILE_DOMAIN ; \
-        fi >> .ver
-       @echo \#define LINUX_COMPILER \"`$(CC) $(CFLAGS) -v 2>&1 | tail -1`\" >> .ver
-       @mv -f .ver $@
-
-include/linux/version.h: ./Makefile
-       @echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
-       @echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)` >> .ver
-       @echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' >>.ver
-       @mv -f .ver $@
-
-init/version.o: init/version.c include/linux/compile.h include/config/MARKER
-       $(CC) $(CFLAGS) $(CFLAGS_KERNEL) -DUTS_MACHINE='"$(HW_ARCH)"' -c -o init/version.o init/version.c
-
-init/main.o: init/main.c include/config/MARKER
-       $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o $<
-
-fs lib mm ipc kernel drivers net: dummy
-       $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
-
-TAGS: dummy
-       etags `find include/asm-$(ARCH) -name '*.h'`
-       find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print | xargs etags -a
-       find $(SUBDIRS) init -name '*.[ch]' | xargs etags -a
-
-# Exuberant ctags works better with -I
-tags: dummy
-       CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`; \
-       ctags $$CTAGSF `find include/asm-$(ARCH) -name '*.h'` && \
-       find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print | xargs ctags $$CTAGSF -a && \
-       find $(SUBDIRS) init -name '*.[ch]' | xargs ctags $$CTAGSF -a
-
-ifdef CONFIG_MODULES
-ifdef CONFIG_MODVERSIONS
-MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
-endif
-
-.PHONY: modules
-modules: $(patsubst %, _mod_%, $(SUBDIRS))
-
-.PHONY: $(patsubst %, _mod_%, $(SUBDIRS))
-$(patsubst %, _mod_%, $(SUBDIRS)) : include/linux/version.h include/config/MARKER
-       $(MAKE) -C $(patsubst _mod_%, %, $@) CFLAGS="$(CFLAGS) $(MODFLAGS)" MAKING_MODULES=1 modules
-
-.PHONY: modules_install
-modules_install: _modinst_ $(patsubst %, _modinst_%, $(SUBDIRS)) _modinst_post
-
-.PHONY: _modinst_
-_modinst_:
-       @rm -rf $(MODLIB)/kernel
-       @rm -f $(MODLIB)/build
-       @mkdir -p $(MODLIB)/kernel
-       @ln -s $(TOPDIR) $(MODLIB)/build
-
-# If System.map exists, run depmod.  This deliberately does not have a
-# dependency on System.map since that would run the dependency tree on
-# vmlinux.  This depmod is only for convenience to give the initial
-# boot a modules.dep even before / is mounted read-write.  However the
-# boot script depmod is the master version.
-ifeq "$(strip $(INSTALL_MOD_PATH))" ""
-depmod_opts    :=
-else
-depmod_opts    := -b $(INSTALL_MOD_PATH) -r
-endif
-.PHONY: _modinst_post
-_modinst_post: _modinst_post_pcmcia
-#      if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
-
-# Backwards compatibilty symlinks for people still using old versions
-# of pcmcia-cs with hard coded pathnames on insmod.  Remove
-# _modinst_post_pcmcia for kernel 2.4.1.
-.PHONY: _modinst_post_pcmcia
-_modinst_post_pcmcia:
-       cd $(MODLIB); \
-       mkdir -p pcmcia; \
-       find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
-
-.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
-$(patsubst %, _modinst_%, $(SUBDIRS)) :
-       $(MAKE) -C $(patsubst _modinst_%, %, $@) modules_install
-
-# modules disabled....
-
-else
-modules modules_install: dummy
-       @echo
-       @echo "The present kernel configuration has modules disabled."
-       @echo "Type 'make config' and enable loadable module support."
-       @echo "Then build a kernel with module support enabled."
-       @echo
-       @exit 1
-endif
-
-clean: archclean
-       find . \( -name '*.[oas]' -o -name core -o -name '.*.flags' \) -type f -print \
-               | grep -v lxdialog/ | xargs rm -f
-       rm -f $(CLEAN_FILES)
-       rm -rf $(CLEAN_DIRS)
-       $(MAKE) -C Documentation/DocBook clean
-
-mrproper: clean archmrproper
-       find . \( -size 0 -o -name .depend \) -type f -print | xargs rm -f
-       rm -f $(MRPROPER_FILES)
-       rm -rf $(MRPROPER_DIRS)
-       $(MAKE) -C Documentation/DocBook mrproper
-
-distclean: mrproper
-       rm -f core `find . \( -not -type d \) -and \
-               \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
-               -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
-               -o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -type f -print` TAGS tags
-
-backup: mrproper
-       cd .. && tar cf - linux/ | gzip -9 > backup.gz
-       sync
-
-sgmldocs: 
-       chmod 755 $(TOPDIR)/scripts/docgen
-       chmod 755 $(TOPDIR)/scripts/gen-all-syms
-       chmod 755 $(TOPDIR)/scripts/kernel-doc
-       $(MAKE) -C $(TOPDIR)/Documentation/DocBook books
-
-psdocs: sgmldocs
-       $(MAKE) -C Documentation/DocBook ps
-
-pdfdocs: sgmldocs
-       $(MAKE) -C Documentation/DocBook pdf
-
-htmldocs: sgmldocs
-       $(MAKE) -C Documentation/DocBook html
-
-sums:
-       find . -type f -print | sort | xargs sum > .SUMS
-
-dep-files: scripts/mkdep archdep include/linux/version.h
-       scripts/mkdep -- init/*.c > .depend
-       scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
-       $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
-ifdef CONFIG_MODVERSIONS
-       $(MAKE) update-modverfile
-endif
-
-ifdef CONFIG_MODVERSIONS
-MODVERFILE := $(TOPDIR)/include/linux/modversions.h
-else
-MODVERFILE :=
-endif
-export MODVERFILE
-
-depend dep: dep-files
-
-checkconfig:
-       find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkconfig.pl
-
-checkhelp:
-       find * -name [cC]onfig.in -print | sort | xargs $(PERL) -w scripts/checkhelp.pl
-
-checkincludes:
-       find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkincludes.pl
-
-ifdef CONFIGURATION
-..$(CONFIGURATION):
-       @echo
-       @echo "You have a bad or nonexistent" .$(CONFIGURATION) ": running 'make" $(CONFIGURATION)"'"
-       @echo
-       $(MAKE) $(CONFIGURATION)
-       @echo
-       @echo "Successful. Try re-making (ignore the error that follows)"
-       @echo
-       exit 1
-
-#dummy: ..$(CONFIGURATION)
-dummy:
-
-else
-
-dummy:
-
-endif
-
-include Rules.make
-
-#
-# This generates dependencies for the .h files.
-#
-
-scripts/mkdep: scripts/mkdep.c
-       $(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c
-
-scripts/split-include: scripts/split-include.c
-       $(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include scripts/split-include.c
-
-#
-# RPM target
-#
-#      If you do a make spec before packing the tarball you can rpm -ta it
-#
-spec:
-       . scripts/mkspec >kernel.spec
-
-#
-#      Build a tar ball, generate an rpm from it and pack the result
-#      There arw two bits of magic here
-#      1) The use of /. to avoid tar packing just the symlink
-#      2) Removing the .dep files as they have source paths in them that
-#         will become invalid
-#
-rpm:   clean spec
-       find . \( -size 0 -o -name .depend -o -name .hdepend \) -type f -print | xargs rm -f
-       set -e; \
-       cd $(TOPDIR)/.. ; \
-       ln -sf $(TOPDIR) $(KERNELPATH) ; \
-       tar -cvz --exclude CVS -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
-       rm $(KERNELPATH) ; \
-       cd $(TOPDIR) ; \
-       . scripts/mkversion > .version ; \
-       rpm -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
-       rm $(TOPDIR)/../$(KERNELPATH).tar.gz
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/Makefile
deleted file mode 100644 (file)
index ffc378e..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# xeno/Makefile
-#
-# This file is included by the global makefile so that you can add your own
-# architecture-specific flags and dependencies. Remember to do have actions
-# for "archclean" and "archdep" for cleaning up and making dependencies for
-# this architecture
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1994 by Linus Torvalds
-#
-# 19990713  Artur Skawina <skawina@geocities.com>
-#           Added '-march' and '-mpreferred-stack-boundary' support
-#
-
-LD=$(CROSS_COMPILE)ld -m elf_i386
-OBJCOPY=$(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S
-LDFLAGS=-e stext
-LINKFLAGS =-T $(TOPDIR)/arch/xeno/vmlinux.lds $(LDFLAGS)
-
-CFLAGS += -pipe
-
-# prevent gcc from keeping the stack 16 byte aligned
-CFLAGS += $(shell if $(CC) -mpreferred-stack-boundary=2 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-mpreferred-stack-boundary=2"; fi)
-
-ifdef CONFIG_M686
-CFLAGS += -march=i686
-endif
-
-ifdef CONFIG_MPENTIUMIII
-CFLAGS += -march=i686
-endif
-
-ifdef CONFIG_MPENTIUM4
-CFLAGS += -march=i686
-endif
-
-ifdef CONFIG_MK7
-CFLAGS += $(shell if $(CC) -march=athlon -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=athlon"; else echo "-march=i686 -malign-functions=4"; fi) 
-endif
-
-HEAD := arch/xeno/kernel/head.o arch/xeno/kernel/init_task.o
-
-SUBDIRS += arch/xeno/kernel arch/xeno/mm arch/xeno/lib
-SUBDIRS += arch/xeno/drivers/console arch/xeno/drivers/network
-SUBDIRS += arch/xeno/drivers/dom0 arch/xeno/drivers/block
-
-CORE_FILES += arch/xeno/kernel/kernel.o arch/xeno/mm/mm.o
-CORE_FILES += arch/xeno/drivers/console/con.o
-CORE_FILES += arch/xeno/drivers/block/blk.o
-CORE_FILES += arch/xeno/drivers/network/net.o
-CORE_FILES += arch/xeno/drivers/dom0/dom0.o
-LIBS := $(TOPDIR)/arch/xeno/lib/lib.a $(LIBS) $(TOPDIR)/arch/xeno/lib/lib.a
-
-arch/xeno/kernel: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/kernel
-
-arch/xeno/mm: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/mm
-
-arch/xeno/drivers/console: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/drivers/console
-
-arch/xeno/drivers/network: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/drivers/network
-
-arch/xeno/drivers/block: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/drivers/block
-
-arch/xeno/drivers/dom0: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/drivers/dom0
-
-ifdef CONFIG_KDB
-arch/xeno/kdb: dummy
-       $(MAKE) linuxsubdirs SUBDIRS=arch/xeno/kdb
-endif
-
-MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
-
-vmlinux: arch/xeno/vmlinux.lds
-
-FORCE: ;
-
-.PHONY: bzImage compressed clean archclean archmrproper archdep
-
-bzImage: vmlinux
-       @$(MAKEBOOT) image.gz
-
-archclean:
-       @$(MAKEBOOT) clean
-
-archmrproper:
-
-archdep:
-       @$(MAKEBOOT) dep
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/boot/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/boot/Makefile
deleted file mode 100644 (file)
index 252daf5..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# arch/xeno/boot/Makefile
-#
-
-image.gz: image
-       gzip -f -9 < $< > $@
-
-image: $(TOPDIR)/vmlinux
-       # Guest OS header -- first 8 bytes are identifier 'XenoGues'.
-       echo -e -n 'XenoGues' >$@ 
-       # Guest OS header -- next 4 bytes are load address (0xC0000000).
-       echo -e -n '\000\000\000\300' >>$@
-       $(OBJCOPY) $< image.body
-       # Guest OS header is immediately followed by raw OS image.
-       # Start address must be at byte 0.
-       cat image.body >>$@
-       rm -f image.body
-
-dep:
-
-clean:
-       rm -f image image.gz
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/config.in b/old/xenolinux-2.4.16-sparse/arch/xeno/config.in
deleted file mode 100644 (file)
index f6e48b4..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# For a description of the syntax of this configuration file,
-# see Documentation/kbuild/config-language.txt.
-#
-mainmenu_name "Linux Kernel Configuration"
-
-define_bool CONFIG_XENO y
-
-define_bool CONFIG_X86 y
-define_bool CONFIG_ISA y
-define_bool CONFIG_SBUS n
-
-define_bool CONFIG_UID16 y
-
-mainmenu_option next_comment
-comment 'Code maturity level options'
-bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
-endmenu
-
-mainmenu_option next_comment
-comment 'Loadable module support'
-bool 'Enable loadable module support' CONFIG_MODULES
-if [ "$CONFIG_MODULES" = "y" ]; then
-   bool '  Set version information on all module symbols' CONFIG_MODVERSIONS
-   bool '  Kernel module loader' CONFIG_KMOD
-fi
-endmenu
-
-mainmenu_option next_comment
-comment 'Processor type and features'
-choice 'Processor family' \
-       "Pentium-Pro/Celeron/Pentium-II         CONFIG_M686 \
-        Pentium-III/Celeron(Coppermine)        CONFIG_MPENTIUMIII \
-        Pentium-4                              CONFIG_MPENTIUM4 \
-        Athlon/Duron/K7                        CONFIG_MK7" Pentium-Pro
-
-   define_bool CONFIG_X86_WP_WORKS_OK y
-   define_bool CONFIG_X86_INVLPG y
-   define_bool CONFIG_X86_CMPXCHG y
-   define_bool CONFIG_X86_XADD y
-   define_bool CONFIG_X86_BSWAP y
-   define_bool CONFIG_X86_POPAD_OK y
-   define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n
-   define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y
-
-   define_bool CONFIG_X86_GOOD_APIC y
-   define_bool CONFIG_X86_PGE y
-   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
-   define_bool CONFIG_X86_TSC y
-
-if [ "$CONFIG_M686" = "y" ]; then
-   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
-fi
-if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
-   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
-fi
-if [ "$CONFIG_MPENTIUM4" = "y" ]; then
-   define_int  CONFIG_X86_L1_CACHE_SHIFT 7
-fi
-if [ "$CONFIG_MK7" = "y" ]; then
-   define_int  CONFIG_X86_L1_CACHE_SHIFT 6
-   define_bool CONFIG_X86_USE_3DNOW y
-fi
-
-choice 'High Memory Support' \
-       "off    CONFIG_NOHIGHMEM \
-        4GB    CONFIG_HIGHMEM4G \
-        64GB   CONFIG_HIGHMEM64G" off
-if [ "$CONFIG_HIGHMEM4G" = "y" ]; then
-   define_bool CONFIG_HIGHMEM y
-fi
-if [ "$CONFIG_HIGHMEM64G" = "y" ]; then
-   define_bool CONFIG_HIGHMEM y
-   define_bool CONFIG_X86_PAE y
-fi
-
-#bool 'Symmetric multi-processing support' CONFIG_SMP
-#if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
-#   define_bool CONFIG_HAVE_DEC_LOCK y
-#fi
-endmenu
-
-mainmenu_option next_comment
-comment 'General setup'
-
-bool 'Networking support' CONFIG_NET
-
-bool 'System V IPC' CONFIG_SYSVIPC
-bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
-bool 'Sysctl support' CONFIG_SYSCTL
-if [ "$CONFIG_PROC_FS" = "y" ]; then
-   choice 'Kernel core (/proc/kcore) format' \
-       "ELF            CONFIG_KCORE_ELF        \
-        A.OUT          CONFIG_KCORE_AOUT" ELF
-fi
-tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
-tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
-tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-
-endmenu
-
-if [ "$CONFIG_NET" = "y" ]; then
-   source net/Config.in
-fi
-
-source drivers/block/Config.in
-define_bool CONFIG_BLK_DEV_IDE_MODES n
-define_bool CONFIG_BLK_DEV_HD n
-
-source fs/Config.in
-
-mainmenu_option next_comment
-comment 'Kernel hacking'
-
-bool 'Kernel debugging' CONFIG_DEBUG_KERNEL
-if [ "$CONFIG_DEBUG_KERNEL" != "n" ]; then
-   bool '  Debug high memory support' CONFIG_DEBUG_HIGHMEM
-   bool '  Debug memory allocations' CONFIG_DEBUG_SLAB
-   bool '  Memory mapped I/O debugging' CONFIG_DEBUG_IOVIRT
-   bool '  Magic SysRq key' CONFIG_MAGIC_SYSRQ
-   bool '  Spinlock debugging' CONFIG_DEBUG_SPINLOCK
-   bool '  Verbose BUG() reporting (adds 70K)' CONFIG_DEBUG_BUGVERBOSE
-   bool '  Built-in Kernel Debugger support' CONFIG_KDB
-   dep_tristate '    KDB modules' CONFIG_KDB_MODULES $CONFIG_KDB
-   if [ "$CONFIG_KDB" = "y" ]; then
-      bool '    KDB off by default' CONFIG_KDB_OFF
-      comment '  Load all symbols for debugging is required for KDB'
-      define_bool CONFIG_KALLSYMS y
-   else
-      bool '  Load all symbols for debugging' CONFIG_KALLSYMS
-   fi
-   bool '  Compile the kernel with frame pointers' CONFIG_FRAME_POINTER
-fi
-
-endmenu
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/defconfig b/old/xenolinux-2.4.16-sparse/arch/xeno/defconfig
deleted file mode 100644 (file)
index 8bd5ada..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_X86=y
-CONFIG_ISA=y
-# CONFIG_SBUS is not set
-CONFIG_UID16=y
-
-#
-# Code maturity level options
-#
-# CONFIG_EXPERIMENTAL is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODVERSIONS=y
-CONFIG_KMOD=y
-
-#
-# Processor type and features
-#
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-CONFIG_M686=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MCYRIXIII is not set
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_XADD=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_L1_CACHE_SHIFT=5
-CONFIG_X86_TSC=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_PGE=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-# CONFIG_MATH_EMULATION is not set
-# CONFIG_MTRR is not set
-# CONFIG_SMP is not set
-# CONFIG_X86_UP_APIC is not set
-
-#
-# General setup
-#
-CONFIG_NET=y
-# CONFIG_PCI is not set
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_HOTPLUG is not set
-# CONFIG_PCMCIA is not set
-# CONFIG_HOTPLUG_PCI is not set
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_PM is not set
-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
-# CONFIG_APM_DO_ENABLE is not set
-# CONFIG_APM_CPU_IDLE is not set
-# CONFIG_APM_DISPLAY_BLANK is not set
-# CONFIG_APM_RTC_IS_GMT is not set
-# CONFIG_APM_ALLOW_INTS is not set
-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_NBD=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_XENOLINUX_BLOCK=y
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_NETLINK=y
-CONFIG_RTNETLINK=y
-# CONFIG_NETLINK_DEV is not set
-# CONFIG_NETFILTER is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-#  
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# ATA/IDE/MFM/RLL support
-#
-# CONFIG_IDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI support
-#
-# CONFIG_SCSI is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION_BOOT is not set
-# CONFIG_FUSION_ISENSE is not set
-# CONFIG_FUSION_CTL is not set
-# CONFIG_FUSION_LAN is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-# CONFIG_NETDEVICES is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Input core support
-#
-# CONFIG_INPUT is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-
-#
-# Character devices
-#
-# CONFIG_VT is not set
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-
-#
-# Input core support is needed for gameports
-#
-
-#
-# Input core support is needed for joysticks
-#
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-# CONFIG_MWAVE is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-CONFIG_AUTOFS_FS=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_EXT3_FS=y
-CONFIG_JBD=y
-# CONFIG_FAT_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_TMPFS is not set
-# CONFIG_RAMFS is not set
-# CONFIG_ISO9660_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=y
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-# CONFIG_SMB_FS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_ZISOFS_FS is not set
-# CONFIG_ZLIB_FS_INFLATE is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_SMB_NLS is not set
-# CONFIG_NLS is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-
-#
-# USB Controllers
-#
-
-#
-# USB Device Class drivers
-#
-
-#
-# USB Human Interface Devices (HID)
-#
-
-#
-#   Input core support is needed for USB HID
-#
-
-#
-# USB Imaging devices
-#
-
-#
-# USB Multimedia devices
-#
-
-#
-#   Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network adaptors
-#
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-
-#
-# USB Miscellaneous drivers
-#
-
-#
-# Kernel hacking
-#
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_IOVIRT is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_KDB is not set
-CONFIG_KALLSYMS=y
-# CONFIG_FRAME_POINTER is not set
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/Makefile
deleted file mode 100644 (file)
index 74a0c6c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := blk.o
-obj-y := xl_block.o xl_block_test.o
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
deleted file mode 100644 (file)
index 0b77e55..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/******************************************************************************
- * xl_block.c
- * 
- * Xenolinux virtual block-device driver.
- * 
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-
-#include <linux/fs.h>
-#include <linux/hdreg.h>
-#include <linux/blkdev.h>
-#include <linux/major.h>
-
-#include <asm/hypervisor-ifs/block.h>
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-#include <asm/io.h>
-#include <asm/uaccess.h>
-
-#define MAJOR_NR XLBLK_MAJOR   /* force defns in blk.h, must precede include */
-static int xlblk_major = XLBLK_MAJOR;
-#include <linux/blk.h>
-
-/* Copied from linux/ide.h */
-typedef unsigned char  byte; 
-
-void xlblk_ide_register_disk(int, unsigned long);
-
-#define XLBLK_MAX 32 /* Maximum minor devices we support */
-#define XLBLK_MAJOR_NAME "xhd"
-#define IDE_PARTN_BITS 6                           /* from ide.h::PARTN_BITS */
-#define IDE_PARTN_MASK ((1<<IDE_PARTN_BITS)-1)     /* from ide.h::PARTN_MASK */
-static int xlblk_blk_size[XLBLK_MAX];
-static int xlblk_blksize_size[XLBLK_MAX];
-static int xlblk_read_ahead; 
-static int xlblk_hardsect_size[XLBLK_MAX];
-static int xlblk_max_sectors[XLBLK_MAX];
-
-#define XLBLK_RESPONSE_IRQ _EVENT_BLK_RESP
-
-#define DEBUG_IRQ    _EVENT_DEBUG 
-
-#if 0
-#define DPRINTK(_f, _a...) printk ( KERN_ALERT _f , ## _a )
-#define DPRINTK_IOCTL(_f, _a...) printk ( KERN_ALERT _f , ## _a )
-#else
-#define DPRINTK(_f, _a...) ((void)0)
-#define DPRINTK_IOCTL(_f, _a...) ((void)0)
-#endif
-
-static blk_ring_t *blk_ring;
-static unsigned int resp_cons; /* Response consumer for comms ring. */
-static xen_disk_info_t xen_disk_info;
-
-int hypervisor_request(void *         id,
-                       int            operation,
-                       char *         buffer,
-                       unsigned long  block_number,
-                       unsigned short block_size,
-                       kdev_t         device);
-
-
-/* ------------------------------------------------------------------------
- */
-
-static int xenolinux_block_open(struct inode *inode, struct file *filep)
-{
-    DPRINTK("xenolinux_block_open\n"); 
-    return 0;
-}
-
-static int xenolinux_block_release(struct inode *inode, struct file *filep)
-{
-    DPRINTK("xenolinux_block_release\n");
-    return 0;
-}
-
-static int xenolinux_block_ioctl(struct inode *inode, struct file *filep,
-                         unsigned command, unsigned long argument)
-{
-    int minor_dev;
-    struct hd_geometry *geo = (struct hd_geometry *)argument;
-
-    DPRINTK("xenolinux_block_ioctl\n"); 
-
-    /* check permissions */
-    if (!capable(CAP_SYS_ADMIN)) return -EPERM;
-    if (!inode)                  return -EINVAL;
-    minor_dev = MINOR(inode->i_rdev);
-    if (minor_dev >= XLBLK_MAX)  return -ENODEV;
-    
-    DPRINTK_IOCTL("command: 0x%x, argument: 0x%lx, minor: 0x%x\n",
-                  command, (long) argument, minor_dev); 
-  
-    switch (command)
-    {
-    case BLKGETSIZE:
-        DPRINTK_IOCTL("   BLKGETSIZE: %x %lx\n", BLKGETSIZE, 
-                      (long) xen_disk_info.disks[0].capacity); 
-       return put_user(xen_disk_info.disks[0].capacity, 
-                       (unsigned long *) argument);
-
-    case BLKRRPART:
-        DPRINTK_IOCTL("   BLKRRPART: %x\n", BLKRRPART); 
-       break;
-
-    case BLKSSZGET:
-        DPRINTK_IOCTL("   BLKSSZGET: %x 0x%x\n", BLKSSZGET,
-                      xlblk_hardsect_size[minor_dev]);
-       return xlblk_hardsect_size[minor_dev]; 
-
-    case HDIO_GETGEO:
-        DPRINTK_IOCTL("   HDIO_GETGEO: %x\n", HDIO_GETGEO);
-       if (!argument) return -EINVAL;
-       if (put_user(0x00,  (unsigned long *) &geo->start)) return -EFAULT;
-       if (put_user(0xff,  (byte *)&geo->heads)) return -EFAULT;
-       if (put_user(0x3f,  (byte *)&geo->sectors)) return -EFAULT;
-       if (put_user(0x106, (unsigned short *)&geo->cylinders)) return -EFAULT;
-       return 0;
-
-    case HDIO_GETGEO_BIG: 
-        DPRINTK_IOCTL("   HDIO_GETGEO_BIG: %x\n", HDIO_GETGEO_BIG);
-       if (!argument) return -EINVAL;
-       if (put_user(0x00,  (unsigned long *) &geo->start))  return -EFAULT;
-       if (put_user(0xff,  (byte *)&geo->heads))   return -EFAULT;
-       if (put_user(0x3f,  (byte *)&geo->sectors)) return -EFAULT;
-       if (put_user(0x106, (unsigned int *) &geo->cylinders)) return -EFAULT;
-
-       return 0;
-
-    default:
-        DPRINTK_IOCTL("   eh? unknown ioctl\n");
-       break;
-    }
-    
-    return 0;
-}
-
-static int xenolinux_block_check(kdev_t dev)
-{
-    DPRINTK("xenolinux_block_check\n");
-    return 0;
-}
-
-static int xenolinux_block_revalidate(kdev_t dev)
-{
-    DPRINTK("xenolinux_block_revalidate\n"); 
-    return 0;
-}
-
-/*
- * hypervisor_request
- *
- * request block io 
- * 
- * id: for guest use only.
- * operation: XEN_BLOCK_READ, XEN_BLOCK_WRITE or XEN_BLOCK_PROBE
- * buffer: buffer to read/write into. this should be a
- *   virtual address in the guest os.
- * block_number:  block to read
- * block_size:  size of each block
- * device:  ide/hda is 768 or 0x300
- */
-int hypervisor_request(void *         id,
-                       int            operation,
-                       char *         buffer,
-                       unsigned long  block_number,
-                       unsigned short block_size,
-                       kdev_t         device)
-{
-    int position;
-    void *buffer_ma; 
-    kdev_t phys_device = (kdev_t) 0;
-    unsigned long sector_number = 0;
-    struct gendisk *gd;     
-
-    /*
-     * Bail if there's no room in the request communication ring. This may be 
-     * because we have a whole bunch of outstanding responses to process. No 
-     * matter, as the response handler will kick the request queue.
-     */
-    if ( BLK_RING_INC(blk_ring->req_prod) == resp_cons )
-        return 1;
-
-    buffer_ma = (void *)phys_to_machine(virt_to_phys(buffer)); 
-
-    switch ( operation )
-    {
-    case XEN_BLOCK_PROBE:
-       phys_device = (kdev_t) 0;
-       sector_number = 0;
-        break;
-
-    case XEN_BLOCK_READ:
-    case XEN_BLOCK_WRITE:
-       if ( MAJOR(device) != XLBLK_MAJOR ) 
-           panic("error: xl_block::hypervisor_request: "
-                  "unknown device [0x%x]\n", device);
-        phys_device = MKDEV(IDE0_MAJOR, 0);
-       /* Compute real buffer location on disk */
-       sector_number = block_number;
-       if ( (gd = (struct gendisk *)xen_disk_info.disks[0].gendisk) != NULL )
-           sector_number += gd->part[MINOR(device)&IDE_PARTN_MASK].start_sect;
-        break;
-
-    default:
-        panic("unknown op %d\n", operation);
-    }
-
-    /* Fill out a communications ring structure & trap to the hypervisor */
-    position = blk_ring->req_prod;
-    blk_ring->ring[position].req.id            = id;
-    blk_ring->ring[position].req.operation     = operation;
-    blk_ring->ring[position].req.buffer        = buffer_ma;
-    blk_ring->ring[position].req.block_number  = block_number;
-    blk_ring->ring[position].req.block_size    = block_size;
-    blk_ring->ring[position].req.device        = phys_device;
-    blk_ring->ring[position].req.sector_number = sector_number;
-
-    blk_ring->req_prod = BLK_RING_INC(position);
-
-    return 0;
-}
-
-
-/*
- * do_xlblk_request
- *  read a block; request is in a request queue
- */
-static void do_xlblk_request (request_queue_t *rq)
-{
-    struct request *req;
-    struct buffer_head *bh;
-    int rw, nsect, full, queued = 0;
-    
-    DPRINTK("xlblk.c::do_xlblk_request for '%s'\n", DEVICE_NAME); 
-
-    while ( !rq->plugged && !QUEUE_EMPTY )
-    {
-       if ( (req = CURRENT) == NULL ) goto out;
-               
-        DPRINTK("do_xlblk_request %p: cmd %i, sec %lx, (%li/%li) bh:%p\n",
-                req, req->cmd, req->sector,
-                req->current_nr_sectors, req->nr_sectors, req->bh);
-
-        rw = req->cmd;
-        if ( rw == READA ) rw = READ;
-        if ((rw != READ) && (rw != WRITE))
-            panic("XenoLinux Virtual Block Device: bad cmd: %d\n", rw);
-
-       req->errors = 0;
-
-        bh = req->bh;
-        while ( bh != NULL )
-       {
-            full = hypervisor_request(
-                bh, (rw == READ) ? XEN_BLOCK_READ : XEN_BLOCK_WRITE, 
-                bh->b_data, bh->b_rsector, bh->b_size, bh->b_dev);
-            
-            if ( full ) goto out;
-
-            queued++;
-
-            /* Dequeue the buffer head from the request. */
-            nsect = bh->b_size >> 9;
-            req->bh = bh->b_reqnext;
-            bh->b_reqnext = NULL;
-            bh = req->bh;
-            
-            if ( bh != NULL )
-            {
-                /* There's another buffer head to do. Update the request. */
-                req->hard_sector += nsect;
-                req->hard_nr_sectors -= nsect;
-                req->sector = req->hard_sector;
-                req->nr_sectors = req->hard_nr_sectors;
-                req->current_nr_sectors = bh->b_size >> 9;
-                req->buffer = bh->b_data;
-            }
-            else
-            {
-                /* That was the last buffer head. Finalise the request. */
-                if ( end_that_request_first(req, 1, "XenBlk") ) BUG();
-                blkdev_dequeue_request(req);
-                end_that_request_last(req);
-            }
-        }
-    }
-
- out:
-    if ( queued != 0 ) HYPERVISOR_block_io_op();
-}
-
-
-static struct block_device_operations xenolinux_block_fops = 
-{
-    open:               xenolinux_block_open,
-    release:            xenolinux_block_release,
-    ioctl:              xenolinux_block_ioctl,
-    check_media_change: xenolinux_block_check,
-    revalidate:         xenolinux_block_revalidate,
-};
-
-static void xlblk_response_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
-    int i;
-    unsigned long flags; 
-    struct buffer_head *bh;
-    
-    spin_lock_irqsave(&io_request_lock, flags);            
-
-    for ( i  = resp_cons;
-         i != blk_ring->resp_prod;
-         i  = BLK_RING_INC(i) )
-    {
-       blk_ring_resp_entry_t *bret = &blk_ring->ring[i].resp;
-        if ( (bh = bret->id) != NULL ) bh->b_end_io(bh, 1);
-    }
-    
-    resp_cons = i;
-
-    /* KAF: We can push work down at this point. We have the lock. */
-    do_xlblk_request(BLK_DEFAULT_QUEUE(MAJOR_NR));
-    
-    spin_unlock_irqrestore(&io_request_lock, flags);
-}
-
-
-int __init xlblk_init(void)
-{
-    int i, error, result;
-
-    /* This mapping was created early at boot time. */
-    blk_ring = (blk_ring_t *)fix_to_virt(FIX_BLKRING_BASE);
-    blk_ring->req_prod = blk_ring->resp_prod = resp_cons = 0;
-    
-    error = request_irq(XLBLK_RESPONSE_IRQ, xlblk_response_int, 0, 
-                       "xlblk-response", NULL);
-    if (error) {
-       printk(KERN_ALERT "Could not allocate receive interrupt\n");
-       goto fail;
-    }
-
-    memset (&xen_disk_info, 0, sizeof(xen_disk_info));
-    xen_disk_info.count = 0;
-
-    if ( hypervisor_request(NULL, XEN_BLOCK_PROBE, (char *) &xen_disk_info,
-                            0, 0, (kdev_t) 0) )
-        BUG();
-    HYPERVISOR_block_io_op();
-    while ( blk_ring->resp_prod != 1 ) barrier();
-    for ( i = 0; i < xen_disk_info.count; i++ )
-    { 
-       printk (KERN_ALERT "  %2d: type: %d, capacity: %ld\n",
-               i, xen_disk_info.disks[i].type, 
-               xen_disk_info.disks[i].capacity);
-    }
-    
-    SET_MODULE_OWNER(&xenolinux_block_fops);
-    result = register_blkdev(xlblk_major, "block", &xenolinux_block_fops);
-    if (result < 0) {
-       printk (KERN_ALERT "xenolinux block: can't get major %d\n",
-               xlblk_major);
-       return result;
-    }
-
-    /* initialize global arrays in drivers/block/ll_rw_block.c */
-    for (i = 0; i < XLBLK_MAX; i++) {
-       xlblk_blk_size[i]      = xen_disk_info.disks[0].capacity;
-       xlblk_blksize_size[i]  = 512;
-       xlblk_hardsect_size[i] = 512;
-       xlblk_max_sectors[i]   = 128;
-    }
-    xlblk_read_ahead  = 8; 
-
-    blk_size[xlblk_major]      = xlblk_blk_size;
-    blksize_size[xlblk_major]  = xlblk_blksize_size;
-    hardsect_size[xlblk_major] = xlblk_hardsect_size;
-    read_ahead[xlblk_major]    = xlblk_read_ahead; 
-    max_sectors[xlblk_major]   = xlblk_max_sectors;
-
-    blk_init_queue(BLK_DEFAULT_QUEUE(xlblk_major), do_xlblk_request);
-
-    /*
-     * Turn off barking 'headactive' mode. We dequeue buffer heads as
-     * soon as we pass them down to Xen.
-     */
-    blk_queue_headactive(BLK_DEFAULT_QUEUE(xlblk_major), 0);
-
-    xlblk_ide_register_disk(0, xen_disk_info.disks[0].capacity);
-
-    printk(KERN_ALERT 
-          "XenoLinux Virtual Block Device Driver installed [device: %d]\n",
-          xlblk_major);
-    return 0;
-
- fail:
-    return error;
-}
-
-void xlblk_ide_register_disk(int idx, unsigned long capacity)
-{
-    int units;
-    int minors;
-    struct gendisk *gd;
-
-    /* plagarized from ide-probe.c::init_gendisk */
-    
-    units = 2; /* from ide.h::MAX_DRIVES */
-
-    minors    = units * (1<<IDE_PARTN_BITS);
-    gd        = kmalloc (sizeof(struct gendisk), GFP_KERNEL);
-    gd->sizes = kmalloc (minors * sizeof(int), GFP_KERNEL);
-    gd->part  = kmalloc (minors * sizeof(struct hd_struct), GFP_KERNEL);
-    memset(gd->part, 0, minors * sizeof(struct hd_struct));
-    
-    gd->major        = xlblk_major;  
-    gd->major_name   = XLBLK_MAJOR_NAME;
-    gd->minor_shift  = IDE_PARTN_BITS; 
-    gd->max_p       = 1<<IDE_PARTN_BITS;
-    gd->nr_real             = units;           
-    gd->real_devices = NULL;          
-    gd->next        = NULL;            
-    gd->fops         = &xenolinux_block_fops;
-    gd->de_arr       = kmalloc (sizeof *gd->de_arr * units, GFP_KERNEL);
-    gd->flags       = kmalloc (sizeof *gd->flags * units, GFP_KERNEL);
-
-    if (gd->de_arr)  
-       memset (gd->de_arr, 0, sizeof *gd->de_arr * units);
-
-    if (gd->flags) 
-       memset (gd->flags, 0, sizeof *gd->flags * units);
-
-    add_gendisk(gd);
-
-    xen_disk_info.disks[idx].gendisk = gd;
-
-    /* default disk size is just a big number.  in the future, we
-       need a message to probe the devices to determine the actual size */
-    register_disk(gd, MKDEV(xlblk_major, 0), 1<<IDE_PARTN_BITS,
-                 &xenolinux_block_fops, capacity);
-
-    return;
-}
-
-
-
-static void __exit xlblk_cleanup(void)
-{
-    /* CHANGE FOR MULTIQUEUE */
-    blk_cleanup_queue(BLK_DEFAULT_QUEUE(xlblk_major));
-
-    /* clean up global arrays */
-    read_ahead[xlblk_major] = 0;
-
-    if (blk_size[xlblk_major]) 
-       kfree(blk_size[xlblk_major]);
-    blk_size[xlblk_major] = NULL;
-
-    if (blksize_size[xlblk_major]) 
-       kfree(blksize_size[xlblk_major]);
-    blksize_size[xlblk_major] = NULL;
-
-    if (hardsect_size[xlblk_major]) 
-       kfree(hardsect_size[xlblk_major]);
-    hardsect_size[xlblk_major] = NULL;
-    
-    /* XXX: free each gendisk */
-    if (unregister_blkdev(xlblk_major, "block"))
-       printk(KERN_ALERT
-              "XenoLinux Virtual Block Device Driver uninstalled w/ errs\n");
-    else
-       printk(KERN_ALERT 
-              "XenoLinux Virtual Block Device Driver uninstalled\n");
-
-    return;
-}
-
-
-#ifdef MODULE
-module_init(xlblk_init);
-module_exit(xlblk_cleanup);
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block_test.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block_test.c
deleted file mode 100644 (file)
index 2ddef27..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/******************************************************************************
- * xenolinux_block_test.c
- * 
- */
-#define EXPORT_SYMTAB
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/proc_fs.h>
-#include <linux/sched.h>
-#include <asm/uaccess.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/delay.h>
-
-#include <asm/hypervisor-ifs/block.h>
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-
-/******************************************************************/
-
-static struct proc_dir_entry *bdt;
-static blk_ring_req_entry_t meta;
-static char * data;
-
-static int proc_read_bdt(char *page, char **start, off_t off,
-                        int count, int *eof, void *data)
-{
-  switch (meta.operation)
-  {
-    case XEN_BLOCK_READ :
-    case XEN_BLOCK_WRITE :
-    {
-      return proc_dump_block(page, start, off, count, eof, data);
-    }
-    case XEN_BLOCK_DEBUG :
-    {
-      return proc_dump_debug(page, start, off, count, eof, data);
-    }
-    default :
-    {
-      printk(KERN_ALERT 
-            "block device test error: unknown operation [%c]\n",
-            meta.operation);
-      return -EINVAL;
-    }
-  }
-}
-
-int proc_dump_debug(char *page, char **start, off_t off,
-                   int count, int *eof, void *data)
-{
-  char header[100];
-  char dump[1024];
-
-  sprintf (header, "Block Device Test: Debug Dump\n\n");
-  
-  sprintf (dump, "%s\n", meta.buffer);
-  
-  if (data)
-  {
-    kfree(data);
-  }
-
-  strncpy (page, dump, count);
-  return strlen(page);
-}
-
-int proc_dump_block(char *page, char **start, off_t off,
-                   int count, int *eof, void *data)
-{
-  char header[100];
-  char dump[1024];
-  char temp[100];
-  int loop;
-
-  sprintf (header, "Block Device Test\n\n%s  blk num: %ld 0x%lx;  size: %d 0x%x;  device: 0x%x\n",
-          meta.operation == XEN_BLOCK_WRITE ? "write" : "read",
-          meta.block_number, meta.block_number,
-          meta.block_size, meta.block_size,
-          meta.device);
-  
-  sprintf (dump, "%s", header);
-
-  if (meta.buffer)
-  {
-    for (loop = 0; loop < 100; loop++)
-    {
-      int i = meta.buffer[loop];
-    
-      if (loop % 8 == 0)
-      {
-       sprintf (temp, "[%2d] ", loop);
-       strcat(dump, temp);
-      }
-      else if (loop % 2 == 0)
-      {
-       strcat(dump, " ");
-      }
-
-      sprintf (temp, " 0x%02x", i & 255);
-      strcat(dump, temp);
-      if ((loop + 1) % 8 == 0)
-      {
-       strcat(dump, "\n");
-      }
-    }
-    strcat(dump, "\n\n");
-  }
-  
-  if (data)
-  {
-    kfree(data);
-  }
-
-  strncpy (page, dump, count);
-  return strlen(page);
-}
-
-int proc_write_bdt(struct file *file, const char *buffer,
-                  unsigned long count, void *data)
-{
-  char *local = kmalloc((count + 1) * sizeof(char), GFP_KERNEL);
-  char  opcode;
-  int  block_number = 0;
-  int  block_size = 0;
-  int  device = 0;
-
-  if (copy_from_user(local, buffer, count))
-  {
-    return -EFAULT;
-  }
-  local[count] = '\0';
-
-  sscanf(local, "%c %i %i %i", 
-        &opcode, &block_number, &block_size, &device);
-
-  if (opcode == 'r' || opcode == 'R')
-  {
-    meta.operation = XEN_BLOCK_READ;
-  }
-  else if (opcode == 'w' || opcode == 'W')
-  {
-    meta.operation = XEN_BLOCK_WRITE;
-  }
-  else if (opcode == 'd' || opcode == 'D')
-  {
-    meta.operation = XEN_BLOCK_DEBUG;
-    block_size = 10000;
-  }
-  else
-  {
-    printk(KERN_ALERT 
-          "block device test error: unknown opcode [%c]\n", opcode);
-    return -EINVAL;
-  }
-
-  if (data)
-  {
-    kfree(data);
-  }
-  data = kmalloc(block_size * sizeof(char), GFP_KERNEL);
-  if (data == NULL)
-  {
-    kfree(local);
-    return -ENOMEM;
-  }
-
-  meta.block_number = block_number;
-  meta.block_size   = block_size;
-  meta.device       = device;
-  meta.buffer       = data;
-
-  /* submit request */
-  hypervisor_request(0, meta.operation, meta.buffer, 
-                    meta.block_number, meta.block_size,
-                    meta.device);
-  HYPERVISOR_block_io_op();
-  mdelay(1000); /* should wait for a proper acknowledgement/response. */
-
-  kfree(local);
-  return count;
-}
-                        
-
-static int __init init_module(void)
-{
-  int return_value = 0;
-
-  /* create proc entry */
-  bdt = create_proc_entry("bdt", 0644, NULL);
-  if (bdt == NULL)
-  {
-    return_value = -ENOMEM;
-    goto error;
-  }
-  bdt->data       = NULL;
-  bdt->read_proc  = proc_read_bdt;
-  bdt->write_proc = proc_write_bdt;
-  bdt->owner      = THIS_MODULE;
-
-  memset(&meta, 0, sizeof(meta));
-  
-  /* success */
-  printk(KERN_ALERT "XenoLinux Block Device Test installed\n");
-  return 0;
-
- error:
-  return return_value;
-}
-
-static void __exit cleanup_module(void)
-{
-  if (data)
-  {
-    kfree(data);
-  }
-  printk(KERN_ALERT "XenoLinux Block Device Test uninstalled\n");
-}
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/Makefile
deleted file mode 100644 (file)
index 5a0e7b3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := con.o
-obj-y := console.o
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/console.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/console/console.c
deleted file mode 100644 (file)
index 11548f8..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/******************************************************************************
- * console.c
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/tty.h>
-#include <linux/tty_flip.h>
-#include <linux/serial.h>
-#include <linux/major.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/console.h>
-
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
-#include <asm/hypervisor.h>
-
-/******************** Kernel console driver ********************************/
-
-static void kconsole_write(struct console *co, const char *s, unsigned count)
-{
-#define STRLEN 256
-    static char str[STRLEN];
-    static int pos = 0;
-    int len;
-    
-    /* We buffer output until we see a newline, or until the buffer is full. */
-    while ( count != 0 )
-    {
-        len = ((STRLEN - pos) > count) ? count : STRLEN - pos;
-        memcpy(str + pos, s, len);
-        pos   += len;
-        s     += len;
-        count -= len;
-        if ( (pos == STRLEN) || (str[pos-1] == '\n') )
-        {
-            (void)HYPERVISOR_console_write(str, pos);
-            pos = 0;
-        }
-    }
-}
-
-static kdev_t kconsole_device(struct console *c)
-{
-    /*
-     * This is the magic that binds our "struct console" to our
-     * "tty_struct", defined below.
-     */
-    return MKDEV(TTY_MAJOR, 0);
-}
-
-static struct console kconsole_info = {
-    name:              "xenocon",
-    write:             kconsole_write,
-    device:             kconsole_device,
-    flags:             CON_PRINTBUFFER,
-    index:             -1,
-};
-
-void xeno_console_init(void)
-{
-    register_console(&kconsole_info);
-}
-
-
-/******************** Initial /dev/console *********************************/
-
-
-static struct tty_driver console_driver;
-static int console_refcount;
-static struct tty_struct *console_table[1];
-static struct termios *console_termios[1];
-static struct termios *console_termios_locked[1];
-
-static int console_write_room(struct tty_struct *tty)
-{
-    return INT_MAX;
-}
-
-static int console_chars_in_buffer(struct tty_struct *tty)
-{
-    return 0;
-}
-
-static inline int console_xmit(int ch)
-{
-    char _ch = ch;
-    kconsole_write(NULL, &_ch, 1);
-    return 1;
-}
-
-static int console_write(struct tty_struct *tty, int from_user,
-                       const u_char * buf, int count)
-{
-    int i;
-
-    if ( from_user && verify_area(VERIFY_READ, buf, count) )
-    {
-        return -EINVAL;
-    }
-
-    for ( i = 0; i < count; i++ )
-    {
-        char ch;
-        if ( from_user )
-        {
-            __get_user(ch, buf + i);
-        }
-        else
-        {
-            ch = buf[i];
-        }
-        console_xmit(ch);
-    }
-    return i;
-}
-
-static void console_put_char(struct tty_struct *tty, u_char ch)
-{
-    console_xmit(ch);
-}
-
-static int console_open(struct tty_struct *tty, struct file *filp)
-{
-    int line;
-
-    MOD_INC_USE_COUNT;
-    line = MINOR(tty->device) - tty->driver.minor_start;
-    if ( line )
-    {
-        MOD_DEC_USE_COUNT;
-        return -ENODEV;
-    }
-
-    tty->driver_data = NULL;
-
-    return 0;
-}
-
-static void console_close(struct tty_struct *tty, struct file *filp)
-{
-    MOD_DEC_USE_COUNT;
-}
-
-static int __init console_ini(void)
-{
-    memset(&console_driver, 0, sizeof(struct tty_driver));
-    console_driver.magic           = TTY_DRIVER_MAGIC;
-    console_driver.driver_name     = "xeno_console";
-    console_driver.name            = "console";
-    console_driver.major           = TTY_MAJOR;
-    console_driver.minor_start     = 0;
-    console_driver.num             = 1;
-    console_driver.type            = TTY_DRIVER_TYPE_SERIAL;
-    console_driver.subtype         = SERIAL_TYPE_NORMAL;
-    console_driver.init_termios    = tty_std_termios;
-    console_driver.flags           = TTY_DRIVER_REAL_RAW;
-    console_driver.refcount        = &console_refcount;
-    console_driver.table           = console_table;
-    console_driver.termios         = console_termios;
-    console_driver.termios_locked  = console_termios_locked;
-    /* Functions */
-    console_driver.open            = console_open;
-    console_driver.close           = console_close;
-    console_driver.write           = console_write;
-    console_driver.write_room      = console_write_room;
-    console_driver.put_char        = console_put_char;
-    console_driver.chars_in_buffer = console_chars_in_buffer;
-
-    if ( tty_register_driver(&console_driver) )
-    {
-        printk(KERN_ERR "Couldn't register Xeno console driver\n");
-    }
-    else
-    {
-        printk("Xeno console successfully installed\n");
-    }
-
-    return 0;
-}
-
-static void __exit console_fin(void)
-{
-    int ret;
-
-    ret = tty_unregister_driver(&console_driver);
-    if ( ret != 0 )
-    {
-        printk(KERN_ERR "Unable to unregister Xeno console driver: %d\n", ret);
-    }
-}
-
-module_init(console_ini);
-module_exit(console_fin);
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/Makefile
deleted file mode 100644 (file)
index 4738fc0..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := dom0.o
-obj-y := dom0_memory.o dom0_core.o vfr.o
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_block.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_block.c
deleted file mode 100644 (file)
index 97d4a65..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * domain 0 block driver interface
- *
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-
-static int __init init_module(void)
-{
-  request_module("xl_block");
-  printk("Successfully installed domain 0 block interface\n");
-
-
-  return 0;
-}
-
-static void __exit cleanup_module(void)
-{
-  printk("Successfully de-installed domain-0 block interface\n");
-  return 0;
-}
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_core.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_core.c
deleted file mode 100644 (file)
index f8af853..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-/******************************************************************************
- * dom0_core.c
- * 
- * Interface to privileged domain-0 commands.
- * 
- * Copyright (c) 2002, K A Fraser, B Dragovic
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/proc_fs.h>
-
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-#include <linux/smp_lock.h>
-#include <linux/swapctl.h>
-#include <linux/iobuf.h>
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-
-#include <asm/pgalloc.h>
-#include <asm/pgtable.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-
-#include "dom0_ops.h"
-
-/* Private proc-file data structures. */
-typedef struct proc_data {
-    unsigned int domain;
-    unsigned long map_size;
-} dom_procdata_t;
-
-typedef struct proc_mem_data {
-    unsigned long pfn;
-    int tot_pages;
-} proc_memdata_t;
-
-#define XENO_BASE       "xeno"
-#define DOM0_CMD_INTF   "dom0_cmd"
-#define DOM0_NEWDOM     "new_dom_data"
-
-#define MAX_LEN         16
-#define DOM_DIR         "dom"
-#define DOM_MEM         "mem"
-#define DOM_VIF         "vif"
-
-#define MAP_DISCONT     1
-
-static struct proc_dir_entry *xeno_base;
-static struct proc_dir_entry *dom0_cmd_intf;
-static struct proc_dir_entry *proc_ft;
-
-unsigned long direct_mmap(unsigned long, unsigned long, pgprot_t, int, int);
-int direct_unmap(unsigned long, unsigned long);
-int direct_disc_unmap(unsigned long, unsigned long, int);
-
-static unsigned char readbuf[1204];
-
-static int cmd_read_proc(char *page, char **start, off_t off,
-                          int count, int *eof, void *data)
-{
-    strcpy(page, readbuf);
-    *readbuf = '\0';
-    *eof = 1;
-    *start = page;
-    return strlen(page);
-}
-
-static ssize_t dom_vif_read(struct file * file, char * buff, size_t size, loff_t * off)
-{
-    char hyp_buf[128]; // Hypervisor is going to write its reply here.
-    network_op_t op;
-    static int finished = 0;
-
-    // This seems to be the only way to make the OS stop making read requests
-    // to the file.  When we use the fileoperations version of read, offset 
-    // seems to be ignored altogether.
-    
-    if (finished) 
-    {
-        finished = 0;
-        return 0;
-    }
-    
-    op.cmd = NETWORK_OP_VIFQUERY;
-    op.u.vif_query.domain = (unsigned int) ((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data;
-    op.u.vif_query.buf = hyp_buf;
-
-    strcpy(hyp_buf, "Error getting domain's vif list from hypervisor.\n"); // This will be replaced if everything works.
-
-    (void)HYPERVISOR_network_op(&op);
-
-    if (*off >= (strlen(hyp_buf)+1)) return 0;
-    
-    copy_to_user(buff, hyp_buf, strlen(hyp_buf));
-    
-    finished = 1;
-    
-    return strlen(hyp_buf)+1;
-}
-
-struct file_operations dom_vif_ops = {
-    read:    dom_vif_read
-};
-
-
-static void create_proc_dom_entries(int dom)
-{
-    struct proc_dir_entry * dir;
-    dom_procdata_t * dom_data;
-    char dir_name[MAX_LEN];
-    struct proc_dir_entry * file;
-
-    snprintf(dir_name, MAX_LEN, "%s%d", DOM_DIR, dom);
-
-    dom_data = (dom_procdata_t *)kmalloc(sizeof(dom_procdata_t), GFP_KERNEL);
-    dom_data->domain = dom;
-
-    dir = proc_mkdir(dir_name, xeno_base);
-    dir->data = dom_data;
-    
-    file = create_proc_entry(DOM_VIF, 0600, dir);
-    if (file != NULL)
-    {
-        file->owner         = THIS_MODULE;
-        file->nlink         = 1;
-        file->proc_fops     = &dom_vif_ops;
-        file->data          = (void *) dom;
-    }
-}
-
-static ssize_t dom_mem_write(struct file * file, const char * buff, 
-       size_t size , loff_t * off)
-{
-    dom_mem_t mem_data;
-    
-    copy_from_user(&mem_data, (dom_mem_t *)buff, sizeof(dom_mem_t));
-    
-    if(direct_disc_unmap(mem_data.vaddr, mem_data.start_pfn, 
-        mem_data.tot_pages) == 0){
-        return sizeof(sizeof(dom_mem_t));
-    } else {
-        return -1;
-    }
-}
-
-static ssize_t dom_mem_read(struct file * file, char * buff, size_t size, loff_t * off)
-{
-    unsigned long addr;
-    pgprot_t prot;
-
-    proc_memdata_t * mem_data = (proc_memdata_t *)((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data;
-
-    prot = PAGE_SHARED; 
-
-    /* remap the range using xen specific routines */
-
-    addr = direct_mmap(mem_data->pfn << PAGE_SHIFT, mem_data->tot_pages << PAGE_SHIFT, prot, MAP_DISCONT, mem_data->tot_pages);
-    
-    copy_to_user((unsigned long *)buff, &addr, sizeof(addr));
-
-    return sizeof(addr);
-}
-
-struct file_operations dom_mem_ops = {
-    read:    dom_mem_read,
-    write:   dom_mem_write,
-};
-
-static int dom_map_mem(unsigned int dom, unsigned long pfn, int tot_pages)
-{
-    int ret = -ENOENT;
-    struct proc_dir_entry * pd = xeno_base->subdir;
-    struct proc_dir_entry * file;
-    proc_memdata_t * memdata;
-
-    while(pd != NULL){
-
-        if((pd->mode & S_IFDIR) && ((dom_procdata_t *)pd->data)->domain == dom){
-
-            /* check if there is already an entry for mem and if so
-             * remove it.
-             */
-            remove_proc_entry(DOM_MEM, pd);
-
-            /* create new entry with parameters describing what to do
-             * when it is mmaped.
-             */
-            file = create_proc_entry(DOM_MEM, 0600, pd);
-            if(file != NULL)
-            {
-                file->owner = THIS_MODULE;
-                file->nlink = 1;
-                file->proc_fops = &dom_mem_ops;
-
-                memdata = (proc_memdata_t *)kmalloc(sizeof(proc_memdata_t), GFP_KERNEL);
-                memdata->pfn = pfn;
-                memdata->tot_pages = tot_pages;
-                file->data = memdata;
-
-                ret = 0;
-                break;
-            }
-
-            ret = -EAGAIN;
-            break;
-        }                    
-        pd = pd->next;
-    }
-
-    return ret;
-}
-
-/* function used to retrieve data associated with new domain */
-static ssize_t dom_data_read(struct file * file, char * buff, size_t size, loff_t * off)
-{
-    dom0_newdomain_t * dom_data = (dom0_newdomain_t *)
-        ((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data;
-
-    copy_to_user((dom0_newdomain_t *)buff, dom_data, sizeof(dom0_newdomain_t));
-
-    remove_proc_entry(DOM0_NEWDOM, xeno_base);
-
-    kfree(dom_data);
-
-    return sizeof(dom0_newdomain_t);
-}
-
-struct file_operations newdom_data_fops = {
-    read:    dom_data_read,
-};
-
-static int cmd_write_proc(struct file *file, const char *buffer, 
-                           u_long count, void *data)
-{
-    dom0_op_t op;
-    int ret = 0;
-    struct proc_dir_entry * new_dom_id;
-    dom0_newdomain_t * params;
-    int i;
-    unsigned long p;
-    
-    copy_from_user(&op, buffer, sizeof(dom0_op_t));
-
-    /* do some sanity checks */
-    if(op.cmd > MAX_CMD){
-        ret = -ENOSYS;
-        goto out;
-    }
-
-    if ( op.cmd == MAP_DOM_MEM )
-    {
-        ret = dom_map_mem(op.u.dommem.domain, op.u.dommem.start_pfn, 
-                        op.u.dommem.tot_pages); 
-    }
-    else if ( op.cmd == DO_PGUPDATES )
-    {
-        ret = HYPERVISOR_pt_update(op.u.pgupdate.pgt_update_arr,
-                                   op.u.pgupdate.num_pgt_updates);
-    }
-    else
-    {
-        ret = HYPERVISOR_dom0_op(&op);
-
-        /* if new domain created, create proc entries */
-        if(op.cmd == DOM0_NEWDOMAIN){
-            create_proc_dom_entries(ret);
-
-            params = (dom0_newdomain_t *)kmalloc(sizeof(dom0_newdomain_t),
-                GFP_KERNEL);
-            params->memory_kb = op.u.newdomain.memory_kb;
-            params->pg_head = op.u.newdomain.pg_head;
-            params->num_vifs = op.u.newdomain.num_vifs;
-            params->domain = op.u.newdomain.domain;
-
-            /* now notify user space of the new domain's id */
-            new_dom_id = create_proc_entry(DOM0_NEWDOM, 0600, xeno_base);
-            if ( new_dom_id != NULL )
-            {
-                new_dom_id->owner      = THIS_MODULE;
-                new_dom_id->nlink      = 1;
-                new_dom_id->proc_fops  = &newdom_data_fops; 
-                new_dom_id->data       = (void *)params; 
-            }
-
-        }
-
-    }
-    
-out:
-    return ret;
-    
-}
-
-static int __init init_module(void)
-{
-    /* xeno proc root setup */
-    xeno_base = proc_mkdir(XENO_BASE, &proc_root); 
-
-    /* xeno control interface */
-    *readbuf = '\0';
-    dom0_cmd_intf = create_proc_entry (DOM0_CMD_INTF, 0600, xeno_base);
-    if ( dom0_cmd_intf != NULL )
-    {
-        dom0_cmd_intf->owner      = THIS_MODULE;
-        dom0_cmd_intf->nlink      = 1;
-        dom0_cmd_intf->read_proc  = cmd_read_proc;
-        dom0_cmd_intf->write_proc = cmd_write_proc;
-    }
-
-    /* set up /proc entries for dom 0 */
-    create_proc_dom_entries(0);
-
-    return 0;
-}
-
-
-static void __exit cleanup_module(void)
-{
-    if ( dom0_cmd_intf == NULL ) return;
-    remove_proc_entry("dom0", &proc_root);
-    dom0_cmd_intf = NULL;
-}
-
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_memory.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_memory.c
deleted file mode 100644 (file)
index 9d14070..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-#include <linux/slab.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-#include <linux/smp_lock.h>
-#include <linux/swapctl.h>
-#include <linux/iobuf.h>
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-#include <linux/list.h>
-
-#include <asm/pgalloc.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-#include <asm/mmu.h>
-
-#include "dom0_ops.h"
-
-#define MAP_CONT    0
-#define MAP_DISCONT 1
-
-extern struct list_head * find_direct(struct list_head *, unsigned long);
-
-/*
- * bd240: functions below perform direct mapping to the real physical pages
- * needed for mapping various hypervisor specific structures needed in dom0
- * userspace by various management applications such as domain builder etc.
- */
-
-#define direct_set_pte(pteptr, pteval) queue_l1_entry_update(__pa(pteptr)|PGREQ_UNCHECKED_UPDATE, (pteval).pte_low)
-
-#define direct_pte_clear(pteptr) queue_l1_entry_update(__pa(pteptr)|PGREQ_UNCHECKED_UPDATE, 0)
-
-#define __direct_pte(x) ((pte_t) { (x) } )
-#define __direct_mk_pte(page_nr,pgprot) __direct_pte(((page_nr) << PAGE_SHIFT) | pgprot_val(pgprot))
-#define direct_mk_pte_phys(physpage, pgprot)   __direct_mk_pte((physpage) >> PAGE_SHIFT, pgprot)
-
-static inline void forget_pte(pte_t page)
-{
-    if (!pte_none(page)) {
-        printk("forget_pte: old mapping existed!\n");
-        BUG();
-    }
-}
-
-static inline void direct_remappte_range(pte_t * pte, unsigned long address, unsigned long size,
-       unsigned long phys_addr, pgprot_t prot)
-{
-       unsigned long end;
-
-       address &= ~PMD_MASK;
-       end = address + size;
-       if (end > PMD_SIZE)
-               end = PMD_SIZE;
-       do {
-               pte_t oldpage;
-               oldpage = ptep_get_and_clear(pte);
-
-               direct_set_pte(pte, direct_mk_pte_phys(phys_addr, prot));
-
-               forget_pte(oldpage);
-               address += PAGE_SIZE;
-               phys_addr += PAGE_SIZE;
-               pte++;
-       } while (address && (address < end));
-
-}
-
-static inline int direct_remappmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
-       unsigned long phys_addr, pgprot_t prot)
-{
-       unsigned long end;
-
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-               end = PGDIR_SIZE;
-       phys_addr -= address;
-       do {
-               pte_t * pte = pte_alloc(mm, pmd, address);
-               if (!pte)
-                       return -ENOMEM;
-               direct_remappte_range(pte, address, end - address, address + phys_addr, prot);
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-       return 0;
-}
-
-/*  Note: this is only safe if the mm semaphore is held when called. */
-int direct_remap_page_range(unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot)
-{
-       int error = 0;
-       pgd_t * dir;
-       unsigned long beg = from;
-       unsigned long end = from + size;
-       struct mm_struct *mm = current->mm;
-
-       phys_addr -= from;
-       dir = pgd_offset(mm, from);
-       flush_cache_range(mm, beg, end);
-       if (from >= end)
-               BUG();
-
-       spin_lock(&mm->page_table_lock);
-       do {
-               pmd_t *pmd = pmd_alloc(mm, dir, from);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
-               error = direct_remappmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
-               if (error)
-                       break;
-               from = (from + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (from && (from < end));
-       spin_unlock(&mm->page_table_lock);
-       flush_tlb_range(mm, beg, end);
-       return error;
-}
-
-/* 
- * used for remapping discontiguous bits of domain's memory, pages to map are
- * found from frame table beginning at the given first_pg index
- */ 
-int direct_remap_disc_page_range(unsigned long from, 
-                unsigned long first_pg, int tot_pages, pgprot_t prot)
-{
-    dom0_op_t dom0_op;
-    unsigned long *pfns = get_free_page(GFP_KERNEL);
-    unsigned long start = from;
-    int pages, i;
-
-    while ( tot_pages != 0 )
-    {
-        dom0_op.cmd = DOM0_GETMEMLIST;
-        dom0_op.u.getmemlist.start_pfn = first_pg;
-        pages = 1023;
-        dom0_op.u.getmemlist.num_pfns = 1024;
-        if ( tot_pages < 1024 )
-            dom0_op.u.getmemlist.num_pfns = pages = tot_pages;
-        dom0_op.u.getmemlist.buffer = pfns;
-        (void)HYPERVISOR_dom0_op(&dom0_op);
-        first_pg = pfns[1023]; 
-
-        for ( i = 0; i < pages; i++ )
-        {
-            if(direct_remap_page_range(start, pfns[i] << PAGE_SHIFT, 
-                                       PAGE_SIZE, prot))
-                goto out;
-            start += PAGE_SIZE;
-            tot_pages--;
-        }
-    }
-
-out:
-    free_page(pfns);
-    return tot_pages;
-} 
-           
-/* below functions replace standard sys_mmap and sys_munmap which are absolutely useless
- * for direct memory mapping. direct_zap* functions are minor ammendments to the 
- * original versions in mm/memory.c. the changes are to enable unmapping of real physical
- * addresses.
- */
-
-unsigned long direct_mmap(unsigned long phys_addr, unsigned long size, 
-                pgprot_t prot, int flag, int tot_pages)
-{
-    direct_mmap_node_t * dmmap;
-    struct list_head * entry;
-    unsigned long addr;
-    int ret = 0;
-    
-    if(!capable(CAP_SYS_ADMIN)){
-        ret = -EPERM;
-        goto out;
-    }
-
-    /* get unmapped area invokes xen specific arch_get_unmapped_area */
-    addr = get_unmapped_area(NULL, 0, size, 0, 0);
-    if(addr & ~PAGE_MASK){
-        ret = -ENOMEM;
-        goto out;
-    }
-
-    /* add node on the list of directly mapped areas, make sure the
-     * list remains sorted.
-     */ 
-    dmmap = (direct_mmap_node_t *)kmalloc(sizeof(direct_mmap_node_t), GFP_KERNEL);
-    dmmap->vm_start = addr;
-    dmmap->vm_end = addr + size;
-       entry = find_direct(&current->mm->context.direct_list, addr);
-       if(entry != &current->mm->context.direct_list){
-               list_add_tail(&dmmap->list, entry);
-       } else {
-       list_add_tail(&dmmap->list, &current->mm->context.direct_list);
-       }
-
-    /* and perform the mapping */
-    if(flag == MAP_DISCONT){
-        ret = direct_remap_disc_page_range(addr, phys_addr >> PAGE_SHIFT, 
-            tot_pages, prot);
-    } else {
-        ret = direct_remap_page_range(addr, phys_addr, size, prot);
-    }
-
-    if(ret == 0)
-        ret = addr;
-
-out: 
-    return ret;
-}
-
-/* most of the checks, refcnt updates, cache stuff have been thrown out as they are not
- * needed
- */
-static inline int direct_zap_pte_range(mmu_gather_t *tlb, pmd_t * pmd, unsigned long address, 
-                unsigned long size)
-{
-       unsigned long offset;
-       pte_t * ptep;
-       int freed = 0;
-
-       if (pmd_none(*pmd))
-               return 0;
-       if (pmd_bad(*pmd)) {
-               pmd_ERROR(*pmd);
-               pmd_clear(pmd);
-               return 0;
-       }
-       ptep = pte_offset(pmd, address);
-       offset = address & ~PMD_MASK;
-       if (offset + size > PMD_SIZE)
-               size = PMD_SIZE - offset;
-       size &= PAGE_MASK;
-       for (offset=0; offset < size; ptep++, offset += PAGE_SIZE) {
-               pte_t pte = *ptep;
-               if (pte_none(pte))
-                       continue;
-               freed ++;
-               direct_pte_clear(ptep);
-       }
-
-       return freed;
-}
-
-static inline int direct_zap_pmd_range(mmu_gather_t *tlb, pgd_t * dir, 
-                unsigned long address, unsigned long size)
-{
-       pmd_t * pmd;
-       unsigned long end;
-       int freed;
-
-       if (pgd_none(*dir))
-               return 0;
-       if (pgd_bad(*dir)) {
-               pgd_ERROR(*dir);
-               pgd_clear(dir);
-               return 0;
-       }
-       pmd = pmd_offset(dir, address);
-       end = address + size;
-       if (end > ((address + PGDIR_SIZE) & PGDIR_MASK))
-               end = ((address + PGDIR_SIZE) & PGDIR_MASK);
-       freed = 0;
-       do {
-               freed += direct_zap_pte_range(tlb, pmd, address, end - address);
-               address = (address + PMD_SIZE) & PMD_MASK; 
-               pmd++;
-       } while (address < end);
-       return freed;
-}
-
-/*
- * remove user pages in a given range.
- */
-void direct_zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size)
-{
-       mmu_gather_t *tlb;
-       pgd_t * dir;
-       unsigned long start = address, end = address + size;
-       int freed = 0;
-
-       dir = pgd_offset(mm, address);
-
-       /*
-        * This is a long-lived spinlock. That's fine.
-        * There's no contention, because the page table
-        * lock only protects against kswapd anyway, and
-        * even if kswapd happened to be looking at this
-        * process we _want_ it to get stuck.
-        */
-       if (address >= end)
-               BUG();
-       spin_lock(&mm->page_table_lock);
-       flush_cache_range(mm, address, end);
-       tlb = tlb_gather_mmu(mm);
-
-       do {
-               freed += direct_zap_pmd_range(tlb, dir, address, end - address);
-               address = (address + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (address && (address < end));
-
-       /* this will flush any remaining tlb entries */
-       tlb_finish_mmu(tlb, start, end);
-
-    /* decrementing rss removed */
-
-       spin_unlock(&mm->page_table_lock);
-}
-
-int direct_unmap(unsigned long addr, unsigned long size)
-{
-    direct_mmap_node_t * node;
-    struct list_head * curr;
-    struct list_head * direct_list = &current->mm->context.direct_list;    
-
-    curr = direct_list->next;
-    while(curr != direct_list){
-        node = list_entry(curr, direct_mmap_node_t, list);
-        if(node->vm_start == addr)
-            break;
-        curr = curr->next;
-    }
-
-    if(curr == direct_list)
-        return -1;
-
-    list_del(&node->list);
-    kfree(node);
-
-    direct_zap_page_range(current->mm, addr, size);
-    return 0;
-}
-
-int direct_disc_unmap(unsigned long from, unsigned long first_pg, int tot_pages)
-{
-    int count = 0;
-    direct_mmap_node_t * node;
-    struct list_head * curr;
-    struct list_head * direct_list = &current->mm->context.direct_list;    
-
-    curr = direct_list->next;
-    while(curr != direct_list){
-        node = list_entry(curr, direct_mmap_node_t, list);
-
-        if(node->vm_start == from)
-            break;
-        curr = curr->next;
-    }
-
-    if(curr == direct_list)
-        return -1;
-
-    list_del(&node->list);
-    kfree(node);
-
-    while(count < tot_pages){
-            direct_zap_page_range(current->mm, from, PAGE_SIZE);
-            from += PAGE_SIZE;
-            count++;
-    }
-
-    return 0;
-} 
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_ops.h b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/dom0_ops.h
deleted file mode 100644 (file)
index d98ce1b..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/******************************************************************************
- * dom0_ops.h
- * 
- * Process command requests from domain-0 guest OS.
- * 
- * Copyright (c) 2002, K A Fraser, B Dragovic
- */
-
-#define DOM0_NEWDOMAIN   0
-#define DOM0_KILLDOMAIN  1
-#define DOM0_GETMEMLIST  2
-#define DOM0_STARTDOM    4
-#define MAP_DOM_MEM      6 /* Not passed down to Xen */
-#define DO_PGUPDATES     7 /* Not passed down to Xen */
-#define MAX_CMD          8
-
-#define MAX_CMD_LEN     256
-
-typedef struct dom0_newdomain_st
-{
-    unsigned int domain;
-    unsigned int memory_kb;
-    unsigned int num_vifs;  // temporary
-    unsigned long pg_head;  // return parameter
-} dom0_newdomain_t;
-
-typedef struct dom0_killdomain_st
-{
-    unsigned int domain;
-} dom0_killdomain_t;
-
-typedef struct dom0_getmemlist_st
-{
-    unsigned long start_pfn;
-    unsigned long num_pfns;
-    void *buffer;
-} dom0_getmemlist_t;
-
-/* This is entirely processed by XenoLinux */
-typedef struct dom_mem 
-{
-    unsigned int domain;
-    unsigned long vaddr;
-    unsigned long start_pfn;
-    int tot_pages;
-} dom_mem_t;
-
-/* This is entirely processed by XenoLinux */
-typedef struct dom_pgupdate
-{
-    unsigned long pgt_update_arr;
-    unsigned long num_pgt_updates;
-} dom_pgupdate_t;
-
-typedef struct domain_launch
-{
-    unsigned int domain;
-    unsigned long l2_pgt_addr;
-    unsigned long virt_load_addr;
-    unsigned long virt_shinfo_addr;
-    unsigned long virt_startinfo_addr;
-    unsigned int num_vifs;
-    char cmd_line[MAX_CMD_LEN];
-} dom_meminfo_t;
-
-typedef struct dom0_op_st
-{
-    unsigned long cmd;
-    union
-    {
-        dom0_newdomain_t newdomain;
-        dom0_killdomain_t killdomain;
-        dom0_getmemlist_t getmemlist;
-        dom_mem_t dommem;
-        dom_pgupdate_t pgupdate;
-        dom_meminfo_t meminfo;
-    }
-    u;
-} dom0_op_t;
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/vfr.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/dom0/vfr.c
deleted file mode 100644 (file)
index 13fe25e..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/******************************************************************************
- * vfr.c
- *
- * Interface to the virtual firewall/router.
- *
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/proc_fs.h>
-
-#include <asm/hypervisor-ifs/network.h>
-
-static struct proc_dir_entry *proc_vfr;
-
-static unsigned char readbuf[1024];
-
-/* Helpers, implemented at the bottom. */
-u32 getipaddr(const char *buff, unsigned int len);
-u16 antous(const char *buff, int len);
-int anton(const char *buff, int len);
-
-static int vfr_read_proc(char *page, char **start, off_t off,
-                                          int count, int *eof, void *data)
-{   
-    strcpy(page, readbuf);
-    *readbuf = '\0';
-    *eof = 1;
-    *start = page;
-    return strlen(page);
-}
-
-/* The format for the vfr interface is as follows:
- *
- *  COMMAND <field>=<val> [<field>=<val> [...]]
- *
- *  where:
- *
- *  COMMAND = { ACCEPT | COUNT }
- *
- *  field=val pairs are as follows:
- *
- *  field = { srcaddr | dstaddr }
- *      val is a dot seperated, numeric IP address.
- *
- *  field = { srcport | dstport }
- *      val is a (16-bit) unsigned int
- *
- *  field = { proto }
- *      val = { IP | TCP | UDP | ARP }
- *
- */
-
-#define isspace(_x) ( ((_x)==' ')  || ((_x)=='\t') || ((_x)=='\v') || \
-                     ((_x)=='\f') || ((_x)=='\r') || ((_x)=='\n') )
-
-static int vfr_write_proc(struct file *file, const char *buffer,
-                                           u_long count, void *data)
-{
-  network_op_t op;
-  int ret, len;
-  int ts, te, tl; // token start, end, and length
-  int fs, fe, fl; // field.
-
-  len = count;
-  ts = te = 0;
-
-  memset(&op, 0, sizeof(network_op_t));
-
-  // get the command:
-  while ( count && isspace(buffer[ts]) ) { ts++; count--; } // skip spaces.
-  te = ts;
-  while ( count && !isspace(buffer[te]) ) { te++; count--; } // command end
-  if ( te <= ts ) goto bad;
-  tl = te - ts;
-  
-  if ( strncmp(&buffer[ts], "ADD", tl) == 0 )
-  {
-     op.cmd = NETWORK_OP_ADDRULE;
-  }
-  else if ( strncmp(&buffer[ts], "DELETE", tl) == 0 )
-  {
-     op.cmd = NETWORK_OP_DELETERULE;
-  }
-  else if ( strncmp(&buffer[ts], "PRINT", tl) == 0 )
-  {
-     op.cmd = NETWORK_OP_GETRULELIST;
-     goto doneparsing;
-  }
-        
-  ts = te;
-  
-  // get the action
-  while ( count && (buffer[ts] == ' ') ) { ts++; count--; } // skip spaces.
-  te = ts;
-  while ( count && (buffer[te] != ' ') ) { te++; count--; } // command end
-  if ( te <= ts ) goto bad;
-  tl = te - ts;
-
-  if ( strncmp(&buffer[ts], "ACCEPT", tl) == 0 ) 
-  {
-    op.u.net_rule.action = NETWORK_ACTION_ACCEPT;
-    goto keyval;
-  }
-  if ( strncmp(&buffer[ts], "COUNT", tl) == 0 ) 
-  {
-    op.u.net_rule.action = NETWORK_ACTION_COUNT;
-    goto keyval;
-  }
-   
-  // default case;
-  return (len);
-  
-
-  // get the key=val pairs.
- keyval:
-  while (count)
-  {
-    //get field
-    ts = te; while ( count && isspace(buffer[ts]) ) { ts++; count--; }
-    te = ts;
-    while ( count && !isspace(buffer[te]) && (buffer[te] != '=') ) 
-      { te++; count--; }
-    if ( te <= ts )
-       goto doneparsing;
-    tl = te - ts;
-    fs = ts; fe = te; fl = tl; // save the field markers.
-    // skip "   =   " (ignores extra equals.)
-    while ( count && (isspace(buffer[te]) || (buffer[te] == '=')) ) 
-      { te++; count--; }
-    ts = te;
-    while ( count && !isspace(buffer[te]) ) { te++; count--; }
-    tl = te - ts;
-
-    if ( (fl <= 0) || (tl <= 0) ) goto bad;
-
-    if (strncmp(&buffer[fs], "srcaddr", fl) == 0) 
-    {  
-      op.u.net_rule.src_addr = getipaddr(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "dstaddr", fl) == 0)
-    {    
-      op.u.net_rule.dst_addr = getipaddr(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "srcaddrmask", fl) == 0) 
-    {
-      op.u.net_rule.src_addr_mask = getipaddr(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "dstaddrmask", fl) == 0)
-    {
-      op.u.net_rule.dst_addr_mask = getipaddr(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "srcport", fl) == 0)
-    {
-      op.u.net_rule.src_port = antous(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "dstport", fl) == 0)
-    {
-      op.u.net_rule.dst_port = antous(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "srcportmask", fl) == 0)
-    {
-      op.u.net_rule.src_port_mask = antous(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "dstportmask", fl) == 0)
-    {
-      op.u.net_rule.dst_port_mask = antous(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "srcint", fl) == 0)
-    {
-      op.u.net_rule.src_interface = anton(&buffer[ts], tl);
-    }
-    else if (strncmp(&buffer[fs], "dstint", fl) == 0)
-    {
-      op.u.net_rule.dst_interface = anton(&buffer[ts], tl);
-    }
-    else if ( (strncmp(&buffer[fs], "proto", fl) == 0))
-    {  
-      if (strncmp(&buffer[ts], "any", tl) == 0) 
-         op.u.net_rule.proto = NETWORK_PROTO_ANY; 
-      if (strncmp(&buffer[ts], "ip", tl) == 0)
-         op.u.net_rule.proto = NETWORK_PROTO_IP;
-      if (strncmp(&buffer[ts], "tcp", tl) == 0) 
-         op.u.net_rule.proto = NETWORK_PROTO_TCP;
-      if (strncmp(&buffer[ts], "udp", tl) == 0)
-         op.u.net_rule.proto = NETWORK_PROTO_UDP;
-      if (strncmp(&buffer[ts], "arp", tl) == 0)
-         op.u.net_rule.proto = NETWORK_PROTO_ARP;
-      
-    }
-  }
-
- doneparsing:  
-  ret = HYPERVISOR_network_op(&op);
-  return(len);
-
- bad:
-  return(len);
-    
-    
-}
-
-static int __init init_module(void)
-{
-    *readbuf = '\0';
-    proc_vfr = create_proc_entry ("vfr", 0600, &proc_root);
-    if ( proc_vfr != NULL )
-    {
-        proc_vfr->owner      = THIS_MODULE;
-        proc_vfr->nlink      = 1;
-        proc_vfr->read_proc  = vfr_read_proc;
-        proc_vfr->write_proc = vfr_write_proc;
-        printk("Successfully installed virtual firewall/router interface\n");
-    }
-    return 0;
-}
-
-static void __exit cleanup_module(void)
-{
-    if ( proc_vfr == NULL ) return;
-    remove_proc_entry("vfr", &proc_root);
-    proc_vfr = NULL;
-}
-
-module_init(init_module);
-module_exit(cleanup_module);
-
-/* Helper functions start here: */
-
-int anton(const char *buff, int len)
-{
-    int ret;
-    char c;
-    int sign = 1;
-    
-    ret = 0;
-
-    if (len == 0) return 0;
-    if (*buff == '-') { sign = -1; buff++; len--; }
-
-    while ( (len) && ((c = *buff) >= '0') && (c <= '9') )
-    {
-        ret *= 10;
-        ret += c - '0';
-        buff++; len--;
-    }
-
-    ret *= sign;
-    return ret;
-}
-    
-u16 antous(const char *buff, int len)
-{
-  u16 ret;
-  char c;
-
-  ret = 0;
-
-  while ( (len) && ((c = *buff) >= '0') && (c <= '9') )
-  {
-    ret *= 10;
-    ret += c - '0';
-    buff++; len--;
-  }
-
-  return ret;
-}
-
-u32 getipaddr(const char *buff, unsigned int len)
-{
-  int i; 
-  char c;
-  u32 ret, val;
-
-  ret = 0; val = 0;
-
-  while ( len )
-  {
-    if (!((((c = *buff) >= '0') && ( c <= '9')) || ( c == '.' ) ) ) 
-    {
-      return(0); // malformed.
-    }
-
-    if ( c == '.' ) {
-      if (val > 255) return (0); //malformed.
-      ret = ret << 8; 
-      ret += val;
-      val = 0;
-      len--; buff++;
-      continue;
-    }
-    val *= 10;
-    val += c - '0';
-    buff++; len--;
-  }
-  ret = ret << 8;
-  ret += val;
-
-  return (ret);
-}
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/Makefile
deleted file mode 100644 (file)
index b44a288..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := net.o
-obj-y := network.o
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/network.c b/old/xenolinux-2.4.16-sparse/arch/xeno/drivers/network/network.c
deleted file mode 100644 (file)
index 4c4ace1..0000000
+++ /dev/null
@@ -1,443 +0,0 @@
-/******************************************************************************
- * network.c
- * 
- * Virtual network driver for XenoLinux.
- * 
- * Copyright (c) 2002, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-
-#include <linux/netdevice.h>
-#include <linux/inetdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <linux/init.h>
-
-#include <asm/io.h>
-#include <net/sock.h>
-
-#define NET_TX_IRQ _EVENT_NET_TX
-#define NET_RX_IRQ _EVENT_NET_RX
-
-#define TX_MAX_ENTRIES (TX_RING_SIZE - 2)
-#define RX_MAX_ENTRIES (RX_RING_SIZE - 2)
-
-#define TX_RING_INC(_i)    (((_i)+1) & (TX_RING_SIZE-1))
-#define RX_RING_INC(_i)    (((_i)+1) & (RX_RING_SIZE-1))
-#define TX_RING_ADD(_i,_j) (((_i)+(_j)) & (TX_RING_SIZE-1))
-#define RX_RING_ADD(_i,_j) (((_i)+(_j)) & (RX_RING_SIZE-1))
-
-#define RX_BUF_SIZE ((PAGE_SIZE/2)+1) /* Fool the slab allocator :-) */
-
-static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs);
-static void network_tx_int(int irq, void *dev_id, struct pt_regs *ptregs);
-static void network_tx_buf_gc(struct net_device *dev);
-static void network_alloc_rx_buffers(struct net_device *dev);
-static void network_free_rx_buffers(struct net_device *dev);
-static void cleanup_module(void);
-
-static struct list_head dev_list;
-
-/*
- * RX RING:   RX_IDX <= rx_cons <= rx_prod
- * TX RING:   TX_IDX <= tx_cons <= tx_prod
- * (*_IDX allocated privately here, *_cons & *_prod shared with hypervisor)
- */
-struct net_private
-{
-    struct list_head list;
-    struct net_device *dev;
-
-    struct net_device_stats stats;
-    struct sk_buff **tx_skb_ring;
-    struct sk_buff **rx_skb_ring;
-    atomic_t tx_entries;
-    unsigned int rx_idx, tx_idx, tx_full;
-    net_ring_t *net_ring;
-    spinlock_t tx_lock;
-};
-
-static int network_open(struct net_device *dev)
-{
-    struct net_private *np = dev->priv;
-    int error = 0;
-
-    np->rx_idx = np->tx_idx = np->tx_full = 0;
-
-    memset(&np->stats, 0, sizeof(np->stats));
-
-    spin_lock_init(&np->tx_lock);
-
-    atomic_set(&np->tx_entries, 0);
-
-    np->net_ring->tx_prod = np->net_ring->tx_cons = np->net_ring->tx_event = 0;
-    np->net_ring->rx_prod = np->net_ring->rx_cons = np->net_ring->rx_event = 0;
-    np->net_ring->tx_ring = NULL;
-    np->net_ring->rx_ring = NULL;
-
-    np->tx_skb_ring = kmalloc(TX_RING_SIZE * sizeof(struct sk_buff *),
-                              GFP_KERNEL);
-    np->rx_skb_ring = kmalloc(RX_RING_SIZE * sizeof(struct sk_buff *),
-                              GFP_KERNEL);
-    np->net_ring->tx_ring = kmalloc(TX_RING_SIZE * sizeof(tx_entry_t), 
-                                    GFP_KERNEL);
-    np->net_ring->rx_ring = kmalloc(RX_RING_SIZE * sizeof(rx_entry_t), 
-                                    GFP_KERNEL);
-    if ( (np->tx_skb_ring == NULL) || (np->rx_skb_ring == NULL) ||
-         (np->net_ring->tx_ring == NULL) || (np->net_ring->rx_ring == NULL) )
-    {
-        printk(KERN_WARNING "%s; Could not allocate ring memory\n", dev->name);
-        error = -ENOBUFS;
-        goto fail;
-    }
-
-    network_alloc_rx_buffers(dev);
-
-    error = request_irq(NET_RX_IRQ, network_rx_int, 0, 
-                        "net-rx", dev);
-    if ( error )
-    {
-        printk(KERN_WARNING "%s: Could not allocate receive interrupt\n",
-               dev->name);
-        network_free_rx_buffers(dev);
-        goto fail;
-    }
-
-    error = request_irq(NET_TX_IRQ, network_tx_int, 0, 
-                        "net-tx", dev);
-    if ( error )
-    {
-        printk(KERN_WARNING "%s: Could not allocate transmit interrupt\n",
-               dev->name);
-        free_irq(NET_RX_IRQ, dev);
-        network_free_rx_buffers(dev);
-        goto fail;
-    }
-
-    printk("XenoLinux Virtual Network Driver installed as %s\n", dev->name);
-
-    netif_start_queue(dev);
-
-    MOD_INC_USE_COUNT;
-
-    return 0;
-
- fail:
-    if ( np->net_ring->rx_ring ) kfree(np->net_ring->rx_ring);
-    if ( np->net_ring->tx_ring ) kfree(np->net_ring->tx_ring);
-    if ( np->rx_skb_ring ) kfree(np->rx_skb_ring);
-    if ( np->tx_skb_ring ) kfree(np->tx_skb_ring);
-    kfree(np);
-    return error;
-}
-
-
-static void network_tx_buf_gc(struct net_device *dev)
-{
-    unsigned int i;
-    struct net_private *np = dev->priv;
-    struct sk_buff *skb;
-    unsigned long flags;
-
-    spin_lock_irqsave(&np->tx_lock, flags);
-
-    for ( i = np->tx_idx; i != np->net_ring->tx_cons; i = TX_RING_INC(i) )
-    {
-        skb = np->tx_skb_ring[i];
-        dev_kfree_skb_any(skb);
-        atomic_dec(&np->tx_entries);
-    }
-
-    np->tx_idx = i;
-
-    if ( np->tx_full && (atomic_read(&np->tx_entries) < TX_MAX_ENTRIES) )
-    {
-        np->tx_full = 0;
-        netif_wake_queue(dev);
-    }
-
-    spin_unlock_irqrestore(&np->tx_lock, flags);
-}
-
-inline unsigned long get_ppte(unsigned long addr)
-{
-    unsigned long ppte;
-    pgd_t *pgd; pmd_t *pmd; pte_t *ptep;
-    pgd = pgd_offset_k(addr);
-
-    if ( pgd_none(*pgd) || pgd_bad(*pgd) ) BUG();
-        
-    pmd = pmd_offset(pgd, addr);
-    if ( pmd_none(*pmd) || pmd_bad(*pmd) ) BUG(); 
-        
-    ptep = pte_offset(pmd, addr);
-    ppte = (unsigned long)phys_to_machine(virt_to_phys(ptep));
-
-    return ppte;
-}
-
-static void network_alloc_rx_buffers(struct net_device *dev)
-{
-    unsigned int i;
-    struct net_private *np = dev->priv;
-    struct sk_buff *skb;
-    unsigned int end = RX_RING_ADD(np->rx_idx, RX_MAX_ENTRIES);    
-
-    for ( i = np->net_ring->rx_prod; i != end; i = RX_RING_INC(i) )
-    {
-        skb = dev_alloc_skb(RX_BUF_SIZE);
-        if ( skb == NULL ) break;
-        skb->dev = dev;
-        skb_reserve(skb, 2); /* word align the IP header */
-        np->rx_skb_ring[i] = skb;
-        np->net_ring->rx_ring[i].addr = get_ppte((unsigned long)skb->head); 
-        np->net_ring->rx_ring[i].size = RX_BUF_SIZE - 16; /* arbitrary */
-    }
-
-    np->net_ring->rx_prod = i;
-
-    np->net_ring->rx_event = RX_RING_INC(np->rx_idx);
-
-    HYPERVISOR_net_update();
-}
-
-
-static void network_free_rx_buffers(struct net_device *dev)
-{
-    unsigned int i;
-    struct net_private *np = dev->priv;
-    struct sk_buff *skb;    
-
-    for ( i = np->rx_idx; i != np->net_ring->rx_prod; i = RX_RING_INC(i) )
-    {
-        skb = np->rx_skb_ring[i];
-        dev_kfree_skb(skb);
-    }
-}
-
-static int network_start_xmit(struct sk_buff *skb, struct net_device *dev)
-{
-    unsigned int i;
-    struct net_private *np = (struct net_private *)dev->priv;
-    
-    if ( np->tx_full )
-    {
-        printk(KERN_WARNING "%s: full queue wasn't stopped!\n", dev->name);
-        netif_stop_queue(dev);
-        return -ENOBUFS;
-    }
-    i = np->net_ring->tx_prod;
-
-    if ( (((unsigned long)skb->data & ~PAGE_MASK) + skb->len) >= PAGE_SIZE )
-    {
-        struct sk_buff *new_skb = alloc_skb(RX_BUF_SIZE, GFP_KERNEL);
-        skb_put(new_skb, skb->len);
-        memcpy(new_skb->data, skb->data, skb->len);
-        kfree_skb(skb);
-        skb = new_skb;
-    }   
-    
-    np->tx_skb_ring[i] = skb;
-    np->net_ring->tx_ring[i].addr =
-        (unsigned long)phys_to_machine(virt_to_phys(skb->data));
-    np->net_ring->tx_ring[i].size = skb->len;
-    np->net_ring->tx_prod = TX_RING_INC(i);
-    atomic_inc(&np->tx_entries);
-
-    np->stats.tx_bytes += skb->len;
-    np->stats.tx_packets++;
-
-    spin_lock_irq(&np->tx_lock);
-    if ( atomic_read(&np->tx_entries) >= TX_MAX_ENTRIES )
-    {
-        np->tx_full = 1;
-        netif_stop_queue(dev);
-        np->net_ring->tx_event = 
-            TX_RING_ADD(np->tx_idx, atomic_read(&np->tx_entries) >> 1);
-    }
-    else
-    {
-        /* Avoid unnecessary tx interrupts. */
-        np->net_ring->tx_event = TX_RING_INC(np->net_ring->tx_prod);
-    }
-    spin_unlock_irq(&np->tx_lock);
-
-    /* Must do this after setting tx_event: race with updates of tx_cons. */
-    network_tx_buf_gc(dev);
-
-    HYPERVISOR_net_update();
-
-    return 0;
-}
-
-
-static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
-    unsigned int i;
-    struct net_device *dev = (struct net_device *)dev_id;
-    struct net_private *np = dev->priv;
-    struct sk_buff *skb;
-    
- again:
-    for ( i = np->rx_idx; i != np->net_ring->rx_cons; i = RX_RING_INC(i) )
-    {
-        if (np->net_ring->rx_ring[i].status != RING_STATUS_OK)
-        {
-            printk("bad buffer on RX ring!(%d)\n", 
-                   np->net_ring->rx_ring[i].status);
-            continue;
-        }
-        skb = np->rx_skb_ring[i];
-
-        phys_to_machine_mapping[virt_to_phys(skb->head) >> PAGE_SHIFT] =
-            (*(unsigned long *)phys_to_virt(
-                machine_to_phys(np->net_ring->rx_ring[i].addr))
-                ) >> PAGE_SHIFT;
-
-        skb_put(skb, np->net_ring->rx_ring[i].size);
-        skb->protocol = eth_type_trans(skb, dev);
-
-        /*
-         * Set up shinfo -- from alloc_skb This was particularily nasty:  the
-         * shared info is hidden at the back of the data area (presumably so it
-         * can be shared), but on page flip it gets very spunked.
-         */
-        atomic_set(&(skb_shinfo(skb)->dataref), 1);
-        skb_shinfo(skb)->nr_frags = 0;
-        skb_shinfo(skb)->frag_list = NULL;
-                                
-        np->stats.rx_packets++;
-
-        np->stats.rx_bytes += np->net_ring->rx_ring[i].size;
-        netif_rx(skb);
-        dev->last_rx = jiffies;
-    }
-
-    np->rx_idx = i;
-
-    network_alloc_rx_buffers(dev);
-    
-    /* Deal with hypervisor racing our resetting of rx_event. */
-    smp_mb();
-    if ( np->net_ring->rx_cons != i ) goto again;
-}
-
-
-static void network_tx_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
-    struct net_device *dev = (struct net_device *)dev_id;
-    network_tx_buf_gc(dev);
-}
-
-
-int network_close(struct net_device *dev)
-{
-    struct net_private *np = dev->priv;
-
-    netif_stop_queue(dev);
-
-    free_irq(NET_RX_IRQ, dev);
-    free_irq(NET_TX_IRQ, dev);
-
-    /*
-     * XXXX This cannot be done safely until be have a proper interface
-     * for setting up and tearing down virtual interfaces on the fly.
-     * Currently the receive buffers are locked down by Xen and we have
-     * no sensible way of retrieving them.
-     */
-#if 0
-    network_free_rx_buffers(dev);
-    kfree(np->net_ring->rx_ring);
-    kfree(np->net_ring->tx_ring);
-#endif
-
-    kfree(np->rx_skb_ring);
-    kfree(np->tx_skb_ring);
-
-    MOD_DEC_USE_COUNT;
-
-    return 0;
-}
-
-
-static struct net_device_stats *network_get_stats(struct net_device *dev)
-{
-    struct net_private *np = (struct net_private *)dev->priv;
-    return &np->stats;
-}
-
-
-int __init init_module(void)
-{
-    int i, err;
-    struct net_device *dev;
-    struct net_private *np;
-
-    INIT_LIST_HEAD(&dev_list);
-
-    for ( i = 0; i < start_info.num_net_rings; i++ )
-    {
-        dev = alloc_etherdev(sizeof(struct net_private));
-        if ( dev == NULL )
-        {
-            err = -ENOMEM;
-            goto fail;
-        }
-
-        np = dev->priv;
-        np->net_ring = start_info.net_rings + i;
-
-        SET_MODULE_OWNER(dev);
-        dev->open            = network_open;
-        dev->hard_start_xmit = network_start_xmit;
-        dev->stop            = network_close;
-        dev->get_stats       = network_get_stats;
-
-        memset(dev->dev_addr, 0, ETH_ALEN);
-        *(unsigned int *)(dev->dev_addr + 1) = i;
-
-        if ( (err = register_netdev(dev)) != 0 )
-        {
-            kfree(dev);
-            goto fail;
-        }
-
-        np->dev = dev;
-        list_add(&np->list, &dev_list);
-    }
-
-    return 0;
-
- fail:
-    cleanup_module();
-    return err;
-}
-
-
-static void cleanup_module(void)
-{
-    struct net_private *np;
-    struct net_device *dev;
-
-    while ( !list_empty(&dev_list) )
-    {
-        np = list_entry(dev_list.next, struct net_private, list);
-        list_del(&np->list);
-        dev = np->dev;
-        unregister_netdev(dev);
-        kfree(dev);
-    }
-}
-
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/Makefile
deleted file mode 100644 (file)
index ea830e8..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-.S.o:
-       $(CC) $(AFLAGS) -traditional -c $< -o $*.o
-
-all: kernel.o head.o init_task.o
-
-O_TARGET := kernel.o
-
-export-objs := i386_ksyms.o
-
-obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
-       ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o \
-       i386_ksyms.o i387.o hypervisor.o
-
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/entry.S b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/entry.S
deleted file mode 100644 (file)
index b888ae7..0000000
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- *  linux/arch/i386/entry.S
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- */
-
-/*
- * entry.S contains the system-call and fault low-level handling routines.
- * This also contains the timer-interrupt handler, as well as all interrupts
- * and faults that can result in a task-switch.
- *
- * NOTE: This code handles signal-recognition, which happens every time
- * after a timer-interrupt and after each system call.
- *
- * I changed all the .align's to 4 (16 byte alignment), as that's faster
- * on a 486.
- *
- * Stack layout in 'ret_from_system_call':
- *     ptrace needs to have all regs on the stack.
- *     if the order here is changed, it needs to be
- *     updated in fork.c:copy_process, signal.c:do_signal,
- *     ptrace.c and ptrace.h
- *
- *      0(%esp) - %ebx
- *      4(%esp) - %ecx
- *      8(%esp) - %edx
- *       C(%esp) - %esi
- *     10(%esp) - %edi
- *     14(%esp) - %ebp
- *     18(%esp) - %eax
- *     1C(%esp) - %ds
- *     20(%esp) - %es
- *     24(%esp) - orig_eax
- *     28(%esp) - %eip
- *     2C(%esp) - %cs
- *     30(%esp) - %eflags
- *     34(%esp) - %oldesp
- *     38(%esp) - %oldss
- *
- * "current" is in register %ebx during any slow entries.
- */
-
-#include <linux/config.h>
-#include <linux/sys.h>
-#include <linux/linkage.h>
-#include <asm/segment.h>
-#include <asm/smp.h>
-
-EBX            = 0x00
-ECX            = 0x04
-EDX            = 0x08
-ESI            = 0x0C
-EDI            = 0x10
-EBP            = 0x14
-EAX            = 0x18
-DS             = 0x1C
-ES             = 0x20
-ORIG_EAX       = 0x24
-EIP            = 0x28
-CS             = 0x2C
-EFLAGS         = 0x30
-OLDESP         = 0x34
-OLDSS          = 0x38
-
-CF_MASK                = 0x00000001
-IF_MASK                = 0x00000200
-NT_MASK                = 0x00004000
-
-/*
- * these are offsets into the task-struct.
- */
-state          =  0
-flags          =  4
-sigpending     =  8
-addr_limit     = 12
-exec_domain    = 16
-need_resched   = 20
-tsk_ptrace     = 24
-processor      = 52
-
-ENOSYS = 38
-
-
-#define SAVE_ALL \
-       cld; \
-       pushl %es; \
-       pushl %ds; \
-       pushl %eax; \
-       pushl %ebp; \
-       pushl %edi; \
-       pushl %esi; \
-       pushl %edx; \
-       pushl %ecx; \
-       pushl %ebx; \
-       movl $(__KERNEL_DS),%edx; \
-       movl %edx,%ds; \
-       movl %edx,%es;
-
-#define RESTORE_ALL    \
-       popl %ebx;      \
-       popl %ecx;      \
-       popl %edx;      \
-       popl %esi;      \
-       popl %edi;      \
-       popl %ebp;      \
-       popl %eax;      \
-1:     popl %ds;       \
-2:     popl %es;       \
-       addl $4,%esp;   \
-3:     iret;           \
-.section .fixup,"ax";  \
-4:     movl $0,(%esp); \
-       jmp 1b;         \
-5:     movl $0,(%esp); \
-       jmp 2b;         \
-6:     pushl %ss;      \
-       popl %ds;       \
-       pushl %ss;      \
-       popl %es;       \
-       pushl $11;      \
-        call do_exit;  \
-.previous;             \
-.section __ex_table,"a";\
-       .align 4;       \
-       .long 1b,4b;    \
-       .long 2b,5b;    \
-       .long 3b,6b;    \
-.previous
-
-#define GET_CURRENT(reg) \
-       movl $-8192, reg; \
-       andl %esp, reg
-
-
-ENTRY(ret_from_fork)
-       pushl %ebx
-       call SYMBOL_NAME(schedule_tail)
-       addl $4, %esp
-       GET_CURRENT(%ebx)
-       testb $0x02,tsk_ptrace(%ebx)    # PT_TRACESYS
-       jne tracesys_exit
-       jmp     ret_from_sys_call
-
-#if defined(CONFIG_KDB)
-ENTRY(kdb_call)
-       pushl %eax              # save orig EAX
-       SAVE_ALL
-       pushl %esp              # struct pt_regs
-       pushl $0                # error_code
-       pushl $7                # KDB_REASON_ENTRY
-       call  SYMBOL_NAME(kdb)
-       addl  $12,%esp          # remove args
-       RESTORE_ALL
-#endif
-
-/*
- * Return to user mode is not as complex as all this looks,
- * but we want the default path for a system call return to
- * go as quickly as possible which is why some of this is
- * less clear than it otherwise should be.
- */
-
-ENTRY(system_call)
-       pushl %eax                      # save orig_eax
-       SAVE_ALL
-       GET_CURRENT(%ebx)
-        testb $0x02,tsk_ptrace(%ebx)   # PT_TRACESYS
-       jne tracesys
-       cmpl $(NR_syscalls),%eax
-       jae badsys        
-        call *SYMBOL_NAME(sys_call_table)(,%eax,4)
-       movl %eax,EAX(%esp)             # save the return value
-ENTRY(ret_from_sys_call)
-        movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
-        xorl %eax,%eax
-        movl %eax,4(%esi)               # need_resched and signals atomic test
-ret_syscall_tests:      
-        cmpl $0,need_resched(%ebx)
-       jne reschedule
-       cmpl $0,sigpending(%ebx)
-       je   safesti                    # ensure need_resched updates are seen
-signal_return:
-       btsl %eax,4(%esi)               # reenable event callbacks
-       movl %esp,%eax
-       xorl %edx,%edx
-       call SYMBOL_NAME(do_signal)
-       jmp  ret_from_sys_call
-
-        ALIGN
-restore_all:
-       RESTORE_ALL
-
-       ALIGN
-tracesys:
-       movl $-ENOSYS,EAX(%esp)
-       call SYMBOL_NAME(syscall_trace)
-       movl ORIG_EAX(%esp),%eax
-       cmpl $(NR_syscalls),%eax
-       jae tracesys_exit
-       call *SYMBOL_NAME(sys_call_table)(,%eax,4)
-       movl %eax,EAX(%esp)             # save the return value
-tracesys_exit:
-       call SYMBOL_NAME(syscall_trace)
-       jmp ret_from_sys_call
-badsys:
-       movl $-ENOSYS,EAX(%esp)
-       jmp ret_from_sys_call
-
-       ALIGN
-ENTRY(ret_from_intr)
-       GET_CURRENT(%ebx)
-ret_from_exception:
-       movb CS(%esp),%al
-       testl $2,%eax
-       jne ret_from_sys_call
-       jmp restore_all
-
-       ALIGN
-reschedule:
-        btsl %eax,4(%esi)             # reenable event callbacks
-       call SYMBOL_NAME(schedule)    # test
-       jmp ret_from_sys_call
-
-ENTRY(divide_error)
-       pushl $0                # no error code
-       pushl $ SYMBOL_NAME(do_divide_error)
-       ALIGN
-error_code:
-       pushl %ds
-       pushl %eax
-       xorl %eax,%eax
-       pushl %ebp
-       pushl %edi
-       pushl %esi
-       pushl %edx
-       decl %eax                       # eax = -1
-       pushl %ecx
-       pushl %ebx
-       GET_CURRENT(%ebx)
-       cld
-       movl %es,%ecx
-       movl ORIG_EAX(%esp), %esi       # get the error code
-       movl ES(%esp), %edi             # get the function address
-       movl %eax, ORIG_EAX(%esp)
-       movl %ecx, ES(%esp)
-       movl %esp,%edx
-       pushl %esi                      # push the error code
-       pushl %edx                      # push the pt_regs pointer
-       movl $(__KERNEL_DS),%edx
-       movl %edx,%ds
-       movl %edx,%es
-       call *%edi
-       addl $8,%esp
-       jmp ret_from_exception
-
-# A note on the "critical region" in our callback handler.
-# We want to avoid stacking callback handlers due to events occurring
-# during handling of the last event. To do this, we keep events disabled
-# until we've done all processing. HOWEVER, we must enable events before
-# popping the stack frame (can't be done atomically) and so it would still
-# be possible to get enough handler activations to overflow the stack.
-# Although unlikely, bugs of that kind are hard to track down, so we'd
-# like to avoid the possibility.
-# So, on entry to the handler we detect whether we interrupted an
-# existing activation in its critical region -- if so, we pop the current
-# activation and restart the handler using the previous one.
-ENTRY(hypervisor_callback)
-        pushl %eax
-        SAVE_ALL
-        GET_CURRENT(%ebx)
-        movl EIP(%esp),%eax
-        cmpl $scrit,%eax
-        jb   11f
-        cmpl $ecrit,%eax
-        jb   critical_region_fixup
-11:     push %esp
-        call do_hypervisor_callback
-        add  $4,%esp
-        movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
-        xorl %eax,%eax
-        movb CS(%esp),%cl
-       test $2,%cl          # slow return to ring 2 or 3
-       jne  ret_syscall_tests
-safesti:btsl %eax,4(%esi)     # reenable event callbacks
-scrit:  /**** START OF CRITICAL REGION ****/
-        cmpl %eax,(%esi)
-        jne  14f              # process more events if necessary...
-        RESTORE_ALL
-14:     btrl %eax,4(%esi)
-        jmp  11b
-ecrit:  /**** END OF CRITICAL REGION ****/
-# [How we do the fixup]. We want to merge the current stack frame with the
-# just-interrupted frame. How we do this depends on where in the critical
-# region the interrupted handler was executing, and so how many saved
-# registers are in each frame. We do this quickly using the lookup table
-# 'critical_fixup_table'. For each byte offset in the critical region, it
-# provides the number of bytes which have already been popped from the
-# interrupted stack frame. 
-critical_region_fixup:
-        addl $critical_fixup_table-scrit,%eax
-        movzbl (%eax),%eax    # %eax contains num bytes popped
-        mov  %esp,%esi
-        add  %eax,%esi        # %esi points at end of src region
-        mov  %esp,%edi
-        add  $0x34,%edi       # %edi points at end of dst region
-        mov  %eax,%ecx
-        shr  $2,%ecx          # convert words to bytes
-        je   16f              # skip loop if nothing to copy
-15:     subl $4,%esi          # pre-decrementing copy loop
-        subl $4,%edi
-        movl (%esi),%eax
-        movl %eax,(%edi)
-        loop 15b
-16:     movl %edi,%esp        # final %edi is top of merged stack
-        jmp  11b
-        
-critical_fixup_table:        
-        .byte 0x00,0x00                       # cmpl %eax,(%esi)
-        .byte 0x00,0x00                       # jne  14f
-        .byte 0x00                            # pop  %ebx
-        .byte 0x04                            # pop  %ecx
-        .byte 0x08                            # pop  %edx
-        .byte 0x0c                            # pop  %esi
-        .byte 0x10                            # pop  %edi
-        .byte 0x14                            # pop  %ebp
-        .byte 0x18                            # pop  %eax
-        .byte 0x1c                            # pop  %ds
-        .byte 0x20                            # pop  %es
-        .byte 0x24,0x24,0x24                  # add  $4,%esp
-        .byte 0x28                            # iret
-        .byte 0x00,0x00,0x00,0x00             # btrl %eax,4(%esi)
-        .byte 0x00,0x00                       # jmp  11b
-
-# Hypervisor uses this for application faults while it executes.
-ENTRY(failsafe_callback)
-1:      pop  %ds
-2:      pop  %es
-3:      iret
-.section .fixup,"ax";  \
-4:     movl $0,(%esp); \
-       jmp 1b;         \
-5:     movl $0,(%esp); \
-       jmp 2b;         \
-6:     pushl %ss;      \
-       popl %ds;       \
-       pushl %ss;      \
-       popl %es;       \
-       pushl $11;      \
-       call do_exit;   \
-.previous;             \
-.section __ex_table,"a";\
-       .align 4;       \
-       .long 1b,4b;    \
-       .long 2b,5b;    \
-       .long 3b,6b;    \
-.previous
-        
-ENTRY(coprocessor_error)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_coprocessor_error)
-       jmp error_code
-
-ENTRY(simd_coprocessor_error)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
-       jmp error_code
-
-ENTRY(device_not_available)
-       pushl $-1               # mark this as an int
-       SAVE_ALL
-       GET_CURRENT(%ebx)
-       call SYMBOL_NAME(math_state_restore)
-       jmp ret_from_exception
-
-ENTRY(debug)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_debug)
-       jmp error_code
-
-ENTRY(int3)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_int3)
-       jmp error_code
-
-ENTRY(overflow)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_overflow)
-       jmp error_code
-
-ENTRY(bounds)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_bounds)
-       jmp error_code
-
-ENTRY(invalid_op)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_invalid_op)
-       jmp error_code
-
-ENTRY(coprocessor_segment_overrun)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
-       jmp error_code
-
-ENTRY(double_fault)
-       pushl $ SYMBOL_NAME(do_double_fault)
-       jmp error_code
-
-ENTRY(invalid_TSS)
-       pushl $ SYMBOL_NAME(do_invalid_TSS)
-       jmp error_code
-
-ENTRY(segment_not_present)
-       pushl $ SYMBOL_NAME(do_segment_not_present)
-       jmp error_code
-
-ENTRY(stack_segment)
-       pushl $ SYMBOL_NAME(do_stack_segment)
-       jmp error_code
-
-ENTRY(general_protection)
-       pushl $ SYMBOL_NAME(do_general_protection)
-       jmp error_code
-
-ENTRY(alignment_check)
-       pushl $ SYMBOL_NAME(do_alignment_check)
-       jmp error_code
-
-#if defined(CONFIG_KDB)
-ENTRY(page_fault_mca)
-       pushl %ecx
-       pushl %edx
-       pushl %eax
-       movl  $473,%ecx
-       rdmsr
-       andl  $0xfffffffe,%eax          /* Disable last branch recording */
-       wrmsr
-       popl  %eax
-       popl  %edx
-       popl  %ecx
-       pushl $ SYMBOL_NAME(do_page_fault)
-       jmp error_code
-#endif
-
-# This handler is special, because it gets an extra value on its stack,
-# which is the linear faulting address.
-ENTRY(page_fault)
-       pushl %ds
-       pushl %eax
-       xorl %eax,%eax
-       pushl %ebp
-       pushl %edi
-       pushl %esi
-       pushl %edx
-       decl %eax                       # eax = -1
-       pushl %ecx
-       pushl %ebx
-       GET_CURRENT(%ebx)
-       cld
-       movl %es,%ecx
-       movl ORIG_EAX(%esp), %esi       # get the error code
-       movl ES(%esp), %edi             # get the faulting address
-       movl %eax, ORIG_EAX(%esp)
-       movl %ecx, ES(%esp)
-       movl %esp,%edx
-        pushl %edi                      # push the faulting address
-       pushl %esi                      # push the error code
-       pushl %edx                      # push the pt_regs pointer
-       movl $(__KERNEL_DS),%edx
-       movl %edx,%ds
-       movl %edx,%es
-       call SYMBOL_NAME(do_page_fault)
-       addl $12,%esp
-       jmp ret_from_exception
-
-ENTRY(machine_check)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_machine_check)
-       jmp error_code
-
-ENTRY(spurious_interrupt_bug)
-       pushl $0
-       pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
-       jmp error_code
-
-.data
-ENTRY(sys_call_table)
-       .long SYMBOL_NAME(sys_ni_syscall)       /* 0  -  old "setup()" system call*/
-       .long SYMBOL_NAME(sys_exit)
-       .long SYMBOL_NAME(sys_fork)
-       .long SYMBOL_NAME(sys_read)
-       .long SYMBOL_NAME(sys_write)
-       .long SYMBOL_NAME(sys_open)             /* 5 */
-       .long SYMBOL_NAME(sys_close)
-       .long SYMBOL_NAME(sys_waitpid)
-       .long SYMBOL_NAME(sys_creat)
-       .long SYMBOL_NAME(sys_link)
-       .long SYMBOL_NAME(sys_unlink)           /* 10 */
-       .long SYMBOL_NAME(sys_execve)
-       .long SYMBOL_NAME(sys_chdir)
-       .long SYMBOL_NAME(sys_time)
-       .long SYMBOL_NAME(sys_mknod)
-       .long SYMBOL_NAME(sys_chmod)            /* 15 */
-       .long SYMBOL_NAME(sys_lchown16)
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old break syscall holder */
-       .long SYMBOL_NAME(sys_stat)
-       .long SYMBOL_NAME(sys_lseek)
-       .long SYMBOL_NAME(sys_getpid)           /* 20 */
-       .long SYMBOL_NAME(sys_mount)
-       .long SYMBOL_NAME(sys_oldumount)
-       .long SYMBOL_NAME(sys_setuid16)
-       .long SYMBOL_NAME(sys_getuid16)
-       .long SYMBOL_NAME(sys_stime)            /* 25 */
-       .long SYMBOL_NAME(sys_ptrace)
-       .long SYMBOL_NAME(sys_alarm)
-       .long SYMBOL_NAME(sys_fstat)
-       .long SYMBOL_NAME(sys_pause)
-       .long SYMBOL_NAME(sys_utime)            /* 30 */
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old stty syscall holder */
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old gtty syscall holder */
-       .long SYMBOL_NAME(sys_access)
-       .long SYMBOL_NAME(sys_nice)
-       .long SYMBOL_NAME(sys_ni_syscall)       /* 35 */                /* old ftime syscall holder */
-       .long SYMBOL_NAME(sys_sync)
-       .long SYMBOL_NAME(sys_kill)
-       .long SYMBOL_NAME(sys_rename)
-       .long SYMBOL_NAME(sys_mkdir)
-       .long SYMBOL_NAME(sys_rmdir)            /* 40 */
-       .long SYMBOL_NAME(sys_dup)
-       .long SYMBOL_NAME(sys_pipe)
-       .long SYMBOL_NAME(sys_times)
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old prof syscall holder */
-       .long SYMBOL_NAME(sys_brk)              /* 45 */
-       .long SYMBOL_NAME(sys_setgid16)
-       .long SYMBOL_NAME(sys_getgid16)
-       .long SYMBOL_NAME(sys_signal)
-       .long SYMBOL_NAME(sys_geteuid16)
-       .long SYMBOL_NAME(sys_getegid16)        /* 50 */
-       .long SYMBOL_NAME(sys_acct)
-       .long SYMBOL_NAME(sys_umount)                                   /* recycled never used phys() */
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old lock syscall holder */
-       .long SYMBOL_NAME(sys_ioctl)
-       .long SYMBOL_NAME(sys_fcntl)            /* 55 */
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old mpx syscall holder */
-       .long SYMBOL_NAME(sys_setpgid)
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old ulimit syscall holder */
-       .long SYMBOL_NAME(sys_olduname)
-       .long SYMBOL_NAME(sys_umask)            /* 60 */
-       .long SYMBOL_NAME(sys_chroot)
-       .long SYMBOL_NAME(sys_ustat)
-       .long SYMBOL_NAME(sys_dup2)
-       .long SYMBOL_NAME(sys_getppid)
-       .long SYMBOL_NAME(sys_getpgrp)          /* 65 */
-       .long SYMBOL_NAME(sys_setsid)
-       .long SYMBOL_NAME(sys_sigaction)
-       .long SYMBOL_NAME(sys_sgetmask)
-       .long SYMBOL_NAME(sys_ssetmask)
-       .long SYMBOL_NAME(sys_setreuid16)       /* 70 */
-       .long SYMBOL_NAME(sys_setregid16)
-       .long SYMBOL_NAME(sys_sigsuspend)
-       .long SYMBOL_NAME(sys_sigpending)
-       .long SYMBOL_NAME(sys_sethostname)
-       .long SYMBOL_NAME(sys_setrlimit)        /* 75 */
-       .long SYMBOL_NAME(sys_old_getrlimit)
-       .long SYMBOL_NAME(sys_getrusage)
-       .long SYMBOL_NAME(sys_gettimeofday)
-       .long SYMBOL_NAME(sys_settimeofday)
-       .long SYMBOL_NAME(sys_getgroups16)      /* 80 */
-       .long SYMBOL_NAME(sys_setgroups16)
-       .long SYMBOL_NAME(old_select)
-       .long SYMBOL_NAME(sys_symlink)
-       .long SYMBOL_NAME(sys_lstat)
-       .long SYMBOL_NAME(sys_readlink)         /* 85 */
-       .long SYMBOL_NAME(sys_uselib)
-       .long SYMBOL_NAME(sys_swapon)
-       .long SYMBOL_NAME(sys_reboot)
-       .long SYMBOL_NAME(old_readdir)
-       .long SYMBOL_NAME(old_mmap)             /* 90 */
-       .long SYMBOL_NAME(sys_munmap)
-       .long SYMBOL_NAME(sys_truncate)
-       .long SYMBOL_NAME(sys_ftruncate)
-       .long SYMBOL_NAME(sys_fchmod)
-       .long SYMBOL_NAME(sys_fchown16)         /* 95 */
-       .long SYMBOL_NAME(sys_getpriority)
-       .long SYMBOL_NAME(sys_setpriority)
-       .long SYMBOL_NAME(sys_ni_syscall)                               /* old profil syscall holder */
-       .long SYMBOL_NAME(sys_statfs)
-       .long SYMBOL_NAME(sys_fstatfs)          /* 100 */
-       .long SYMBOL_NAME(sys_ioperm)
-       .long SYMBOL_NAME(sys_socketcall)
-       .long SYMBOL_NAME(sys_syslog)
-       .long SYMBOL_NAME(sys_setitimer)
-       .long SYMBOL_NAME(sys_getitimer)        /* 105 */
-       .long SYMBOL_NAME(sys_newstat)
-       .long SYMBOL_NAME(sys_newlstat)
-       .long SYMBOL_NAME(sys_newfstat)
-       .long SYMBOL_NAME(sys_uname)
-       .long SYMBOL_NAME(sys_iopl)             /* 110 */
-       .long SYMBOL_NAME(sys_vhangup)
-       .long SYMBOL_NAME(sys_ni_syscall)       /* old "idle" system call */
-       .long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
-       .long SYMBOL_NAME(sys_wait4)
-       .long SYMBOL_NAME(sys_swapoff)          /* 115 */
-       .long SYMBOL_NAME(sys_sysinfo)
-       .long SYMBOL_NAME(sys_ipc)
-       .long SYMBOL_NAME(sys_fsync)
-       .long SYMBOL_NAME(sys_sigreturn)
-       .long SYMBOL_NAME(sys_clone)            /* 120 */
-       .long SYMBOL_NAME(sys_setdomainname)
-       .long SYMBOL_NAME(sys_newuname)
-       .long SYMBOL_NAME(sys_modify_ldt)
-       .long SYMBOL_NAME(sys_adjtimex)
-       .long SYMBOL_NAME(sys_mprotect)         /* 125 */
-       .long SYMBOL_NAME(sys_sigprocmask)
-       .long SYMBOL_NAME(sys_create_module)
-       .long SYMBOL_NAME(sys_init_module)
-       .long SYMBOL_NAME(sys_delete_module)
-       .long SYMBOL_NAME(sys_get_kernel_syms)  /* 130 */
-       .long SYMBOL_NAME(sys_quotactl)
-       .long SYMBOL_NAME(sys_getpgid)
-       .long SYMBOL_NAME(sys_fchdir)
-       .long SYMBOL_NAME(sys_bdflush)
-       .long SYMBOL_NAME(sys_sysfs)            /* 135 */
-       .long SYMBOL_NAME(sys_personality)
-       .long SYMBOL_NAME(sys_ni_syscall)       /* for afs_syscall */
-       .long SYMBOL_NAME(sys_setfsuid16)
-       .long SYMBOL_NAME(sys_setfsgid16)
-       .long SYMBOL_NAME(sys_llseek)           /* 140 */
-       .long SYMBOL_NAME(sys_getdents)
-       .long SYMBOL_NAME(sys_select)
-       .long SYMBOL_NAME(sys_flock)
-       .long SYMBOL_NAME(sys_msync)
-       .long SYMBOL_NAME(sys_readv)            /* 145 */
-       .long SYMBOL_NAME(sys_writev)
-       .long SYMBOL_NAME(sys_getsid)
-       .long SYMBOL_NAME(sys_fdatasync)
-       .long SYMBOL_NAME(sys_sysctl)
-       .long SYMBOL_NAME(sys_mlock)            /* 150 */
-       .long SYMBOL_NAME(sys_munlock)
-       .long SYMBOL_NAME(sys_mlockall)
-       .long SYMBOL_NAME(sys_munlockall)
-       .long SYMBOL_NAME(sys_sched_setparam)
-       .long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
-       .long SYMBOL_NAME(sys_sched_setscheduler)
-       .long SYMBOL_NAME(sys_sched_getscheduler)
-       .long SYMBOL_NAME(sys_sched_yield)
-       .long SYMBOL_NAME(sys_sched_get_priority_max)
-       .long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
-       .long SYMBOL_NAME(sys_sched_rr_get_interval)
-       .long SYMBOL_NAME(sys_nanosleep)
-       .long SYMBOL_NAME(sys_mremap)
-       .long SYMBOL_NAME(sys_setresuid16)
-       .long SYMBOL_NAME(sys_getresuid16)      /* 165 */
-       .long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
-       .long SYMBOL_NAME(sys_query_module)
-       .long SYMBOL_NAME(sys_poll)
-       .long SYMBOL_NAME(sys_nfsservctl)
-       .long SYMBOL_NAME(sys_setresgid16)      /* 170 */
-       .long SYMBOL_NAME(sys_getresgid16)
-       .long SYMBOL_NAME(sys_prctl)
-       .long SYMBOL_NAME(sys_rt_sigreturn)
-       .long SYMBOL_NAME(sys_rt_sigaction)
-       .long SYMBOL_NAME(sys_rt_sigprocmask)   /* 175 */
-       .long SYMBOL_NAME(sys_rt_sigpending)
-       .long SYMBOL_NAME(sys_rt_sigtimedwait)
-       .long SYMBOL_NAME(sys_rt_sigqueueinfo)
-       .long SYMBOL_NAME(sys_rt_sigsuspend)
-       .long SYMBOL_NAME(sys_pread)            /* 180 */
-       .long SYMBOL_NAME(sys_pwrite)
-       .long SYMBOL_NAME(sys_chown16)
-       .long SYMBOL_NAME(sys_getcwd)
-       .long SYMBOL_NAME(sys_capget)
-       .long SYMBOL_NAME(sys_capset)           /* 185 */
-       .long SYMBOL_NAME(sys_sigaltstack)
-       .long SYMBOL_NAME(sys_sendfile)
-       .long SYMBOL_NAME(sys_ni_syscall)               /* streams1 */
-       .long SYMBOL_NAME(sys_ni_syscall)               /* streams2 */
-       .long SYMBOL_NAME(sys_vfork)            /* 190 */
-       .long SYMBOL_NAME(sys_getrlimit)
-       .long SYMBOL_NAME(sys_mmap2)
-       .long SYMBOL_NAME(sys_truncate64)
-       .long SYMBOL_NAME(sys_ftruncate64)
-       .long SYMBOL_NAME(sys_stat64)           /* 195 */
-       .long SYMBOL_NAME(sys_lstat64)
-       .long SYMBOL_NAME(sys_fstat64)
-       .long SYMBOL_NAME(sys_lchown)
-       .long SYMBOL_NAME(sys_getuid)
-       .long SYMBOL_NAME(sys_getgid)           /* 200 */
-       .long SYMBOL_NAME(sys_geteuid)
-       .long SYMBOL_NAME(sys_getegid)
-       .long SYMBOL_NAME(sys_setreuid)
-       .long SYMBOL_NAME(sys_setregid)
-       .long SYMBOL_NAME(sys_getgroups)        /* 205 */
-       .long SYMBOL_NAME(sys_setgroups)
-       .long SYMBOL_NAME(sys_fchown)
-       .long SYMBOL_NAME(sys_setresuid)
-       .long SYMBOL_NAME(sys_getresuid)
-       .long SYMBOL_NAME(sys_setresgid)        /* 210 */
-       .long SYMBOL_NAME(sys_getresgid)
-       .long SYMBOL_NAME(sys_chown)
-       .long SYMBOL_NAME(sys_setuid)
-       .long SYMBOL_NAME(sys_setgid)
-       .long SYMBOL_NAME(sys_setfsuid)         /* 215 */
-       .long SYMBOL_NAME(sys_setfsgid)
-       .long SYMBOL_NAME(sys_pivot_root)
-       .long SYMBOL_NAME(sys_mincore)
-       .long SYMBOL_NAME(sys_madvise)
-       .long SYMBOL_NAME(sys_getdents64)       /* 220 */
-       .long SYMBOL_NAME(sys_fcntl64)
-       .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for TUX */
-       .long SYMBOL_NAME(sys_ni_syscall)       /* Reserved for Security */
-       .long SYMBOL_NAME(sys_gettid)
-       .long SYMBOL_NAME(sys_readahead)        /* 225 */
-
-       .rept NR_syscalls-(.-sys_call_table)/4
-               .long SYMBOL_NAME(sys_ni_syscall)
-       .endr
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S
deleted file mode 100644 (file)
index 86a82b1..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-
-.text
-#include <linux/config.h>
-#include <linux/threads.h>
-#include <linux/linkage.h>
-#include <asm/segment.h>
-#include <asm/page.h>
-#include <asm/pgtable.h>
-#include <asm/desc.h>
-
-/* Offsets in start_info structure */
-#define SHARED_INFO  4
-#define MOD_START   12
-#define MOD_LEN     16
-                
-startup_32:
-        cld
-        
-        lss stack_start,%esp
-
-        /* Copy initrd somewhere safe before it's clobbered by BSS. */
-        mov  MOD_LEN(%esi),%ecx
-        shr  $2,%ecx
-        jz   2f        /* bail from copy loop if no initrd */
-        mov  $SYMBOL_NAME(_end),%edi
-        add  MOD_LEN(%esi),%edi
-        mov  MOD_START(%esi),%eax
-        add  MOD_LEN(%esi),%eax
-1:      sub  $4,%eax
-        sub  $4,%edi
-        mov  (%eax),%ebx
-        mov  %ebx,(%edi)
-        loop 1b
-        mov  %edi,MOD_START(%esi)
-                
-        /* Clear BSS first so that there are no surprises... */
-2:      xorl %eax,%eax
-       movl $SYMBOL_NAME(__bss_start),%edi
-       movl $SYMBOL_NAME(_end),%ecx
-       subl %edi,%ecx
-       rep stosb
-
-        /* Copy the necessary stuff from start_info structure. */
-        /* We need to copy shared_info early, so that sti/cli work */
-        mov  SHARED_INFO(%esi),%eax
-        mov  %eax,SYMBOL_NAME(HYPERVISOR_shared_info)
-        mov  $SYMBOL_NAME(start_info_union),%edi
-        mov  $128,%ecx
-        rep movsl
-                
-        jmp SYMBOL_NAME(start_kernel)
-
-ENTRY(stack_start)
-       .long SYMBOL_NAME(init_task_union)+8192, __KERNEL_DS
-
-.org 0x1000
-ENTRY(empty_zero_page)
-
-.org 0x2000
-ENTRY(cpu0_pte_quicklist)
-
-.org 0x2400
-ENTRY(cpu0_pgd_quicklist)
-        
-.org 0x2800
-ENTRY(stext)
-ENTRY(_stext)
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/hypervisor.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/hypervisor.c
deleted file mode 100644 (file)
index c490871..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/******************************************************************************
- * hypervisor.c
- * 
- * Communication to/from hypervisor.
- * 
- * Copyright (c) 2002, K A Fraser
- */
-
-#include <linux/config.h>
-#include <asm/atomic.h>
-#include <linux/irq.h>
-#include <asm/hypervisor.h>
-#include <asm/system.h>
-#include <asm/ptrace.h>
-
-static unsigned long event_mask = 0;
-
-void frobb(void) {}
-
-void do_hypervisor_callback(struct pt_regs *regs)
-{
-    unsigned long events, flags;
-    shared_info_t *shared = HYPERVISOR_shared_info;
-
-    do {
-        /* Specialised local_irq_save(). */
-        flags = shared->events_enable;
-        shared->events_enable = 0;
-        barrier();
-
-        events  = xchg(&shared->events, 0);
-        events &= event_mask;
-
-        __asm__ __volatile__ (
-            "   push %1                            ;"
-            "   sub  $4,%%esp                      ;"
-            "   jmp  2f                            ;"
-            "1: btrl %%eax,%0                      ;" /* clear bit     */
-            "   mov  %%eax,(%%esp)                 ;"
-            "   call do_IRQ                        ;" /* do_IRQ(event) */
-            "2: bsfl %0,%%eax                      ;" /* %eax == bit # */
-            "   jnz  1b                            ;"
-            "   add  $8,%%esp                      ;"
-            /* we use %ebx because it is callee-saved */
-            : : "b" (events), "r" (regs)
-            /* clobbered by callback function calls */
-            : "eax", "ecx", "edx", "memory" ); 
-
-        /* Specialised local_irq_restore(). */
-        shared->events_enable = flags;
-        barrier();
-    }
-    while ( shared->events );
-}
-
-
-
-/*
- * Define interface to generic handling in irq.c
- */
-
-static unsigned int startup_hypervisor_event(unsigned int irq)
-{
-    set_bit(irq, &event_mask);
-    return 0;
-}
-
-static void shutdown_hypervisor_event(unsigned int irq)
-{
-    clear_bit(irq, &event_mask);
-}
-
-static void enable_hypervisor_event(unsigned int irq)
-{
-    set_bit(irq, &event_mask);
-}
-
-static void disable_hypervisor_event(unsigned int irq)
-{
-    clear_bit(irq, &event_mask);
-}
-
-static void ack_hypervisor_event(unsigned int irq)
-{
-    if ( !(event_mask & (1<<irq)) )
-    {
-        printk("Unexpected hypervisor event %d\n", irq);
-        atomic_inc(&irq_err_count);
-    }
-}
-
-static void end_hypervisor_event(unsigned int irq)
-{
-}
-
-static struct hw_interrupt_type hypervisor_irq_type = {
-    "Hypervisor-event",
-    startup_hypervisor_event,
-    shutdown_hypervisor_event,
-    enable_hypervisor_event,
-    disable_hypervisor_event,
-    ack_hypervisor_event,
-    end_hypervisor_event,
-    NULL
-};
-
-void __init init_IRQ(void)
-{
-    int i;
-
-    for ( i = 0; i < NR_IRQS; i++ )
-    {
-        irq_desc[i].status  = IRQ_DISABLED;
-        irq_desc[i].action  = 0;
-        irq_desc[i].depth   = 1;
-        irq_desc[i].handler = &hypervisor_irq_type;
-    }
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i386_ksyms.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i386_ksyms.c
deleted file mode 100644 (file)
index a35ef1c..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/smp.h>
-#include <linux/user.h>
-#include <linux/elfcore.h>
-#include <linux/mca.h>
-#include <linux/sched.h>
-#include <linux/in6.h>
-#include <linux/interrupt.h>
-#include <linux/smp_lock.h>
-#include <linux/pm.h>
-#include <linux/pci.h>
-#include <linux/apm_bios.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/tty.h>
-
-#include <asm/semaphore.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/uaccess.h>
-#include <asm/checksum.h>
-#include <asm/io.h>
-#include <asm/hardirq.h>
-#include <asm/delay.h>
-#include <asm/irq.h>
-#include <asm/mmx.h>
-#include <asm/desc.h>
-#include <asm/pgtable.h>
-#include <asm/pgalloc.h>
-
-extern void dump_thread(struct pt_regs *, struct user *);
-extern spinlock_t rtc_lock;
-
-#ifdef CONFIG_SMP
-extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
-extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
-#endif
-
-#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
-extern struct drive_info_struct drive_info;
-EXPORT_SYMBOL(drive_info);
-#endif
-
-//extern unsigned long get_cmos_time(void);
-
-/* platform dependent support */
-EXPORT_SYMBOL(boot_cpu_data);
-EXPORT_SYMBOL(MCA_bus);
-EXPORT_SYMBOL(__verify_write);
-EXPORT_SYMBOL(dump_thread);
-EXPORT_SYMBOL(dump_fpu);
-EXPORT_SYMBOL(dump_extended_fpu);
-EXPORT_SYMBOL(enable_irq);
-EXPORT_SYMBOL(disable_irq);
-EXPORT_SYMBOL(disable_irq_nosync);
-EXPORT_SYMBOL(probe_irq_mask);
-EXPORT_SYMBOL(kernel_thread);
-EXPORT_SYMBOL(pm_idle);
-EXPORT_SYMBOL(pm_power_off);
-//EXPORT_SYMBOL(get_cmos_time);
-EXPORT_SYMBOL(apm_info);
-
-#ifdef CONFIG_DEBUG_IOVIRT
-EXPORT_SYMBOL(__io_virt_debug);
-#endif
-
-EXPORT_SYMBOL_NOVERS(__down_failed);
-EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
-EXPORT_SYMBOL_NOVERS(__down_failed_trylock);
-EXPORT_SYMBOL_NOVERS(__up_wakeup);
-/* Networking helper routines. */
-EXPORT_SYMBOL(csum_partial_copy_generic);
-/* Delay loops */
-EXPORT_SYMBOL(__udelay);
-EXPORT_SYMBOL(__delay);
-EXPORT_SYMBOL(__const_udelay);
-
-EXPORT_SYMBOL_NOVERS(__get_user_1);
-EXPORT_SYMBOL_NOVERS(__get_user_2);
-EXPORT_SYMBOL_NOVERS(__get_user_4);
-
-EXPORT_SYMBOL(strtok);
-EXPORT_SYMBOL(strpbrk);
-EXPORT_SYMBOL(simple_strtol);
-EXPORT_SYMBOL(strstr);
-
-EXPORT_SYMBOL(strncpy_from_user);
-EXPORT_SYMBOL(__strncpy_from_user);
-EXPORT_SYMBOL(clear_user);
-EXPORT_SYMBOL(__clear_user);
-EXPORT_SYMBOL(__generic_copy_from_user);
-EXPORT_SYMBOL(__generic_copy_to_user);
-EXPORT_SYMBOL(strnlen_user);
-
-#ifdef CONFIG_X86_USE_3DNOW
-EXPORT_SYMBOL(_mmx_memcpy);
-EXPORT_SYMBOL(mmx_clear_page);
-EXPORT_SYMBOL(mmx_copy_page);
-#endif
-
-#ifdef CONFIG_SMP
-EXPORT_SYMBOL(cpu_data);
-EXPORT_SYMBOL(kernel_flag);
-EXPORT_SYMBOL(smp_num_cpus);
-EXPORT_SYMBOL(cpu_online_map);
-EXPORT_SYMBOL_NOVERS(__write_lock_failed);
-EXPORT_SYMBOL_NOVERS(__read_lock_failed);
-
-/* Global SMP irq stuff */
-EXPORT_SYMBOL(synchronize_irq);
-EXPORT_SYMBOL(global_irq_holder);
-EXPORT_SYMBOL(__global_cli);
-EXPORT_SYMBOL(__global_sti);
-EXPORT_SYMBOL(__global_save_flags);
-EXPORT_SYMBOL(__global_restore_flags);
-EXPORT_SYMBOL(smp_call_function);
-
-/* TLB flushing */
-EXPORT_SYMBOL(flush_tlb_page);
-#endif
-
-#ifdef CONFIG_VT
-EXPORT_SYMBOL(screen_info);
-#endif
-
-EXPORT_SYMBOL(get_wchan);
-
-EXPORT_SYMBOL(rtc_lock);
-
-#undef memcpy
-#undef memset
-extern void * memset(void *,int,__kernel_size_t);
-extern void * memcpy(void *,const void *,__kernel_size_t);
-EXPORT_SYMBOL_NOVERS(memcpy);
-EXPORT_SYMBOL_NOVERS(memset);
-
-#ifdef CONFIG_HAVE_DEC_LOCK
-EXPORT_SYMBOL(atomic_dec_and_lock);
-#endif
-
-#ifdef CONFIG_DEBUG_BUGVERBOSE
-EXPORT_SYMBOL(do_BUG);
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i387.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/i387.c
deleted file mode 100644 (file)
index 9b8dfb0..0000000
+++ /dev/null
@@ -1,518 +0,0 @@
-/*
- *  linux/arch/i386/kernel/i387.c
- *
- *  Copyright (C) 1994 Linus Torvalds
- *
- *  Pentium III FXSR, SSE support
- *  General FPU state handling cleanups
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/math_emu.h>
-#include <asm/sigcontext.h>
-#include <asm/user.h>
-#include <asm/ptrace.h>
-#include <asm/uaccess.h>
-
-#define HAVE_HWFP 1
-
-/*
- * The _current_ task is using the FPU for the first time
- * so initialize it and set the mxcsr to its default
- * value at reset if we support XMM instructions and then
- * remeber the current task has used the FPU.
- */
-void init_fpu(void)
-{
-       __asm__("fninit");
-       if ( cpu_has_xmm )
-               load_mxcsr(0x1f80);
-               
-       current->used_math = 1;
-}
-
-/*
- * FPU lazy state save handling.
- */
-
-static inline void __save_init_fpu( struct task_struct *tsk )
-{
-       if ( cpu_has_fxsr ) {
-               asm volatile( "fxsave %0 ; fnclex"
-                             : "=m" (tsk->thread.i387.fxsave) );
-       } else {
-               asm volatile( "fnsave %0 ; fwait"
-                             : "=m" (tsk->thread.i387.fsave) );
-       }
-       tsk->flags &= ~PF_USEDFPU;
-}
-
-void save_init_fpu( struct task_struct *tsk )
-{
-       __save_init_fpu(tsk);
-       stts();
-}
-
-void kernel_fpu_begin(void)
-{
-       struct task_struct *tsk = current;
-
-       if (tsk->flags & PF_USEDFPU) {
-               __save_init_fpu(tsk);
-               return;
-       }
-       clts();
-}
-
-void restore_fpu( struct task_struct *tsk )
-{
-       if ( cpu_has_fxsr ) {
-               asm volatile( "fxrstor %0"
-                             : : "m" (tsk->thread.i387.fxsave) );
-       } else {
-               asm volatile( "frstor %0"
-                             : : "m" (tsk->thread.i387.fsave) );
-       }
-}
-
-/*
- * FPU tag word conversions.
- */
-
-static inline unsigned short twd_i387_to_fxsr( unsigned short twd )
-{
-       unsigned int tmp; /* to avoid 16 bit prefixes in the code */
-       /* Transform each pair of bits into 01 (valid) or 00 (empty) */
-        tmp = ~twd;
-        tmp = (tmp | (tmp>>1)) & 0x5555; /* 0V0V0V0V0V0V0V0V */
-        /* and move the valid bits to the lower byte. */
-        tmp = (tmp | (tmp >> 1)) & 0x3333; /* 00VV00VV00VV00VV */
-        tmp = (tmp | (tmp >> 2)) & 0x0f0f; /* 0000VVVV0000VVVV */
-        tmp = (tmp | (tmp >> 4)) & 0x00ff; /* 00000000VVVVVVVV */
-        return tmp;
-}
-
-static inline unsigned long twd_fxsr_to_i387( struct i387_fxsave_struct *fxsave )
-{
-       struct _fpxreg *st = NULL;
-       unsigned long twd = (unsigned long) fxsave->twd;
-       unsigned long tag;
-       unsigned long ret = 0xffff0000;
-       int i;
-
-#define FPREG_ADDR(f, n)       ((char *)&(f)->st_space + (n) * 16);
-
-       for ( i = 0 ; i < 8 ; i++ ) {
-               if ( twd & 0x1 ) {
-                       st = (struct _fpxreg *) FPREG_ADDR( fxsave, i );
-
-                       switch ( st->exponent & 0x7fff ) {
-                       case 0x7fff:
-                               tag = 2;                /* Special */
-                               break;
-                       case 0x0000:
-                               if ( !st->significand[0] &&
-                                    !st->significand[1] &&
-                                    !st->significand[2] &&
-                                    !st->significand[3] ) {
-                                       tag = 1;        /* Zero */
-                               } else {
-                                       tag = 2;        /* Special */
-                               }
-                               break;
-                       default:
-                               if ( st->significand[3] & 0x8000 ) {
-                                       tag = 0;        /* Valid */
-                               } else {
-                                       tag = 2;        /* Special */
-                               }
-                               break;
-                       }
-               } else {
-                       tag = 3;                        /* Empty */
-               }
-               ret |= (tag << (2 * i));
-               twd = twd >> 1;
-       }
-       return ret;
-}
-
-/*
- * FPU state interaction.
- */
-
-unsigned short get_fpu_cwd( struct task_struct *tsk )
-{
-       if ( cpu_has_fxsr ) {
-               return tsk->thread.i387.fxsave.cwd;
-       } else {
-               return (unsigned short)tsk->thread.i387.fsave.cwd;
-       }
-}
-
-unsigned short get_fpu_swd( struct task_struct *tsk )
-{
-       if ( cpu_has_fxsr ) {
-               return tsk->thread.i387.fxsave.swd;
-       } else {
-               return (unsigned short)tsk->thread.i387.fsave.swd;
-       }
-}
-
-unsigned short get_fpu_twd( struct task_struct *tsk )
-{
-       if ( cpu_has_fxsr ) {
-               return tsk->thread.i387.fxsave.twd;
-       } else {
-               return (unsigned short)tsk->thread.i387.fsave.twd;
-       }
-}
-
-unsigned short get_fpu_mxcsr( struct task_struct *tsk )
-{
-       if ( cpu_has_xmm ) {
-               return tsk->thread.i387.fxsave.mxcsr;
-       } else {
-               return 0x1f80;
-       }
-}
-
-void set_fpu_cwd( struct task_struct *tsk, unsigned short cwd )
-{
-       if ( cpu_has_fxsr ) {
-               tsk->thread.i387.fxsave.cwd = cwd;
-       } else {
-               tsk->thread.i387.fsave.cwd = ((long)cwd | 0xffff0000);
-       }
-}
-
-void set_fpu_swd( struct task_struct *tsk, unsigned short swd )
-{
-       if ( cpu_has_fxsr ) {
-               tsk->thread.i387.fxsave.swd = swd;
-       } else {
-               tsk->thread.i387.fsave.swd = ((long)swd | 0xffff0000);
-       }
-}
-
-void set_fpu_twd( struct task_struct *tsk, unsigned short twd )
-{
-       if ( cpu_has_fxsr ) {
-               tsk->thread.i387.fxsave.twd = twd_i387_to_fxsr(twd);
-       } else {
-               tsk->thread.i387.fsave.twd = ((long)twd | 0xffff0000);
-       }
-}
-
-void set_fpu_mxcsr( struct task_struct *tsk, unsigned short mxcsr )
-{
-       if ( cpu_has_xmm ) {
-               tsk->thread.i387.fxsave.mxcsr = (mxcsr & 0xffbf);
-       }
-}
-
-/*
- * FXSR floating point environment conversions.
- */
-
-static inline int convert_fxsr_to_user( struct _fpstate *buf,
-                                       struct i387_fxsave_struct *fxsave )
-{
-       unsigned long env[7];
-       struct _fpreg *to;
-       struct _fpxreg *from;
-       int i;
-
-       env[0] = (unsigned long)fxsave->cwd | 0xffff0000;
-       env[1] = (unsigned long)fxsave->swd | 0xffff0000;
-       env[2] = twd_fxsr_to_i387(fxsave);
-       env[3] = fxsave->fip;
-       env[4] = fxsave->fcs | ((unsigned long)fxsave->fop << 16);
-       env[5] = fxsave->foo;
-       env[6] = fxsave->fos;
-
-       if ( __copy_to_user( buf, env, 7 * sizeof(unsigned long) ) )
-               return 1;
-
-       to = &buf->_st[0];
-       from = (struct _fpxreg *) &fxsave->st_space[0];
-       for ( i = 0 ; i < 8 ; i++, to++, from++ ) {
-               if ( __copy_to_user( to, from, sizeof(*to) ) )
-                       return 1;
-       }
-       return 0;
-}
-
-static inline int convert_fxsr_from_user( struct i387_fxsave_struct *fxsave,
-                                         struct _fpstate *buf )
-{
-       unsigned long env[7];
-       struct _fpxreg *to;
-       struct _fpreg *from;
-       int i;
-
-       if ( __copy_from_user( env, buf, 7 * sizeof(long) ) )
-               return 1;
-
-       fxsave->cwd = (unsigned short)(env[0] & 0xffff);
-       fxsave->swd = (unsigned short)(env[1] & 0xffff);
-       fxsave->twd = twd_i387_to_fxsr((unsigned short)(env[2] & 0xffff));
-       fxsave->fip = env[3];
-       fxsave->fop = (unsigned short)((env[4] & 0xffff0000) >> 16);
-       fxsave->fcs = (env[4] & 0xffff);
-       fxsave->foo = env[5];
-       fxsave->fos = env[6];
-
-       to = (struct _fpxreg *) &fxsave->st_space[0];
-       from = &buf->_st[0];
-       for ( i = 0 ; i < 8 ; i++, to++, from++ ) {
-               if ( __copy_from_user( to, from, sizeof(*from) ) )
-                       return 1;
-       }
-       return 0;
-}
-
-/*
- * Signal frame handlers.
- */
-
-static inline int save_i387_fsave( struct _fpstate *buf )
-{
-       struct task_struct *tsk = current;
-
-       unlazy_fpu( tsk );
-       tsk->thread.i387.fsave.status = tsk->thread.i387.fsave.swd;
-       if ( __copy_to_user( buf, &tsk->thread.i387.fsave,
-                            sizeof(struct i387_fsave_struct) ) )
-               return -1;
-       return 1;
-}
-
-static inline int save_i387_fxsave( struct _fpstate *buf )
-{
-       struct task_struct *tsk = current;
-       int err = 0;
-
-       unlazy_fpu( tsk );
-
-       if ( convert_fxsr_to_user( buf, &tsk->thread.i387.fxsave ) )
-               return -1;
-
-       err |= __put_user( tsk->thread.i387.fxsave.swd, &buf->status );
-       err |= __put_user( X86_FXSR_MAGIC, &buf->magic );
-       if ( err )
-               return -1;
-
-       if ( __copy_to_user( &buf->_fxsr_env[0], &tsk->thread.i387.fxsave,
-                            sizeof(struct i387_fxsave_struct) ) )
-               return -1;
-       return 1;
-}
-
-int save_i387( struct _fpstate *buf )
-{
-       if ( !current->used_math )
-               return 0;
-
-       /* This will cause a "finit" to be triggered by the next
-        * attempted FPU operation by the 'current' process.
-        */
-       current->used_math = 0;
-
-       if ( HAVE_HWFP ) {
-               if ( cpu_has_fxsr ) {
-                       return save_i387_fxsave( buf );
-               } else {
-                       return save_i387_fsave( buf );
-               }
-       } else {
-               return save_i387_soft( &current->thread.i387.soft, buf );
-       }
-}
-
-static inline int restore_i387_fsave( struct _fpstate *buf )
-{
-       struct task_struct *tsk = current;
-       clear_fpu( tsk );
-       return __copy_from_user( &tsk->thread.i387.fsave, buf,
-                                sizeof(struct i387_fsave_struct) );
-}
-
-static inline int restore_i387_fxsave( struct _fpstate *buf )
-{
-       struct task_struct *tsk = current;
-       clear_fpu( tsk );
-       if ( __copy_from_user( &tsk->thread.i387.fxsave, &buf->_fxsr_env[0],
-                              sizeof(struct i387_fxsave_struct) ) )
-               return 1;
-       /* mxcsr bit 6 and 31-16 must be zero for security reasons */
-       tsk->thread.i387.fxsave.mxcsr &= 0xffbf;
-       return convert_fxsr_from_user( &tsk->thread.i387.fxsave, buf );
-}
-
-int restore_i387( struct _fpstate *buf )
-{
-       int err;
-
-       if ( HAVE_HWFP ) {
-               if ( cpu_has_fxsr ) {
-                       err =  restore_i387_fxsave( buf );
-               } else {
-                       err = restore_i387_fsave( buf );
-               }
-       } else {
-               err = restore_i387_soft( &current->thread.i387.soft, buf );
-       }
-       current->used_math = 1;
-       return err;
-}
-
-/*
- * ptrace request handlers.
- */
-
-static inline int get_fpregs_fsave( struct user_i387_struct *buf,
-                                   struct task_struct *tsk )
-{
-       return __copy_to_user( buf, &tsk->thread.i387.fsave,
-                              sizeof(struct user_i387_struct) );
-}
-
-static inline int get_fpregs_fxsave( struct user_i387_struct *buf,
-                                    struct task_struct *tsk )
-{
-       return convert_fxsr_to_user( (struct _fpstate *)buf,
-                                    &tsk->thread.i387.fxsave );
-}
-
-int get_fpregs( struct user_i387_struct *buf, struct task_struct *tsk )
-{
-       if ( HAVE_HWFP ) {
-               if ( cpu_has_fxsr ) {
-                       return get_fpregs_fxsave( buf, tsk );
-               } else {
-                       return get_fpregs_fsave( buf, tsk );
-               }
-       } else {
-               return save_i387_soft( &tsk->thread.i387.soft,
-                                      (struct _fpstate *)buf );
-       }
-}
-
-static inline int set_fpregs_fsave( struct task_struct *tsk,
-                                   struct user_i387_struct *buf )
-{
-       return __copy_from_user( &tsk->thread.i387.fsave, buf,
-                                sizeof(struct user_i387_struct) );
-}
-
-static inline int set_fpregs_fxsave( struct task_struct *tsk,
-                                    struct user_i387_struct *buf )
-{
-       return convert_fxsr_from_user( &tsk->thread.i387.fxsave,
-                                      (struct _fpstate *)buf );
-}
-
-int set_fpregs( struct task_struct *tsk, struct user_i387_struct *buf )
-{
-       if ( HAVE_HWFP ) {
-               if ( cpu_has_fxsr ) {
-                       return set_fpregs_fxsave( tsk, buf );
-               } else {
-                       return set_fpregs_fsave( tsk, buf );
-               }
-       } else {
-               return restore_i387_soft( &tsk->thread.i387.soft,
-                                         (struct _fpstate *)buf );
-       }
-}
-
-int get_fpxregs( struct user_fxsr_struct *buf, struct task_struct *tsk )
-{
-       if ( cpu_has_fxsr ) {
-               if (__copy_to_user( (void *)buf, &tsk->thread.i387.fxsave,
-                                   sizeof(struct user_fxsr_struct) ))
-                       return -EFAULT;
-               return 0;
-       } else {
-               return -EIO;
-       }
-}
-
-int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct *buf )
-{
-       if ( cpu_has_fxsr ) {
-               __copy_from_user( &tsk->thread.i387.fxsave, (void *)buf,
-                                 sizeof(struct user_fxsr_struct) );
-               /* mxcsr bit 6 and 31-16 must be zero for security reasons */
-               tsk->thread.i387.fxsave.mxcsr &= 0xffbf;
-               return 0;
-       } else {
-               return -EIO;
-       }
-}
-
-/*
- * FPU state for core dumps.
- */
-
-static inline void copy_fpu_fsave( struct task_struct *tsk,
-                                  struct user_i387_struct *fpu )
-{
-       memcpy( fpu, &tsk->thread.i387.fsave,
-               sizeof(struct user_i387_struct) );
-}
-
-static inline void copy_fpu_fxsave( struct task_struct *tsk,
-                                  struct user_i387_struct *fpu )
-{
-       unsigned short *to;
-       unsigned short *from;
-       int i;
-
-       memcpy( fpu, &tsk->thread.i387.fxsave, 7 * sizeof(long) );
-
-       to = (unsigned short *)&fpu->st_space[0];
-       from = (unsigned short *)&tsk->thread.i387.fxsave.st_space[0];
-       for ( i = 0 ; i < 8 ; i++, to += 5, from += 8 ) {
-               memcpy( to, from, 5 * sizeof(unsigned short) );
-       }
-}
-
-int dump_fpu( struct pt_regs *regs, struct user_i387_struct *fpu )
-{
-       int fpvalid;
-       struct task_struct *tsk = current;
-
-       fpvalid = tsk->used_math;
-       if ( fpvalid ) {
-               unlazy_fpu( tsk );
-               if ( cpu_has_fxsr ) {
-                       copy_fpu_fxsave( tsk, fpu );
-               } else {
-                       copy_fpu_fsave( tsk, fpu );
-               }
-       }
-
-       return fpvalid;
-}
-
-int dump_extended_fpu( struct pt_regs *regs, struct user_fxsr_struct *fpu )
-{
-       int fpvalid;
-       struct task_struct *tsk = current;
-
-       fpvalid = tsk->used_math && cpu_has_fxsr;
-       if ( fpvalid ) {
-               unlazy_fpu( tsk );
-               memcpy( fpu, &tsk->thread.i387.fxsave,
-                       sizeof(struct user_fxsr_struct) );
-       }
-
-       return fpvalid;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/init_task.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/init_task.c
deleted file mode 100644 (file)
index 7779809..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <linux/mm.h>
-#include <linux/sched.h>
-#include <linux/init.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/desc.h>
-
-static struct fs_struct init_fs = INIT_FS;
-static struct files_struct init_files = INIT_FILES;
-static struct signal_struct init_signals = INIT_SIGNALS;
-struct mm_struct init_mm = INIT_MM(init_mm);
-
-/*
- * Initial task structure.
- *
- * We need to make sure that this is 8192-byte aligned due to the
- * way process stacks are handled. This is done by having a special
- * "init_task" linker map entry..
- */
-union task_union init_task_union 
-       __attribute__((__section__(".data.init_task"))) =
-               { INIT_TASK(init_task_union.task) };
-
-/*
- * per-CPU TSS segments. Threads are completely 'soft' on Linux,
- * no more per-task TSS's. The TSS size is kept cacheline-aligned
- * so they are allowed to end up in the .data.cacheline_aligned
- * section. Since TSS's are completely CPU-local, we want them
- * on exact cacheline boundaries, to eliminate cacheline ping-pong.
- */ 
-struct tss_struct init_tss[NR_CPUS] __cacheline_aligned = { [0 ... NR_CPUS-1] = INIT_TSS };
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ioport.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ioport.c
deleted file mode 100644 (file)
index 6bce25a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/types.h>
-#include <linux/stddef.h>
-
-
-asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
-{
-    /* No IO permission! */
-    return -EPERM;
-}
-
-
-asmlinkage int sys_iopl(unsigned long unused)
-{
-    /* The hypervisor won't allow it! */
-    return -EPERM;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/irq.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/irq.c
deleted file mode 100644 (file)
index 7c85590..0000000
+++ /dev/null
@@ -1,1129 +0,0 @@
-/*
- *     linux/arch/i386/kernel/irq.c
- *
- *     Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
- *
- * This file contains the code used by various IRQ handling routines:
- * asking for different IRQ's should be done through these routines
- * instead of just grabbing them. Thus setups with different IRQ numbers
- * shouldn't result in any weird surprises, and installing new handlers
- * should be easier.
- */
-
-/*
- * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
- *
- * IRQs are in fact implemented a bit like signal handlers for the kernel.
- * Naturally it's not a 1:1 relation, but there are similarities.
- */
-
-#include <linux/config.h>
-#include <linux/ptrace.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/ioport.h>
-#include <linux/interrupt.h>
-#include <linux/timex.h>
-#include <linux/slab.h>
-#include <linux/random.h>
-#include <linux/smp_lock.h>
-#include <linux/init.h>
-#include <linux/kernel_stat.h>
-#include <linux/irq.h>
-#include <linux/proc_fs.h>
-#include <linux/kdb.h>
-
-#include <asm/atomic.h>
-#include <asm/io.h>
-#include <asm/smp.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/delay.h>
-#include <asm/desc.h>
-#include <asm/irq.h>
-
-
-
-/*
- * Linux has a controller-independent x86 interrupt architecture.
- * every controller has a 'controller-template', that is used
- * by the main code to do the right thing. Each driver-visible
- * interrupt source is transparently wired to the apropriate
- * controller. Thus drivers need not be aware of the
- * interrupt-controller.
- *
- * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
- * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
- * (IO-APICs assumed to be messaging to Pentium local-APICs)
- *
- * the code is designed to be easily extended with new/different
- * interrupt controllers, without having to do assembly magic.
- */
-
-/*
- * Controller mappings for all interrupt sources:
- */
-irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned =
-       { [0 ... NR_IRQS-1] = { 0, &no_irq_type, NULL, 0, SPIN_LOCK_UNLOCKED}};
-
-static void register_irq_proc (unsigned int irq);
-
-/*
- * Special irq handlers.
- */
-
-void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
-
-/*
- * Generic no controller code
- */
-
-static void enable_none(unsigned int irq) { }
-static unsigned int startup_none(unsigned int irq) { return 0; }
-static void disable_none(unsigned int irq) { }
-static void ack_none(unsigned int irq)
-{
-    printk("unexpected IRQ trap at vector %02x\n", irq);
-}
-
-/* startup is the same as "enable", shutdown is same as "disable" */
-#define shutdown_none  disable_none
-#define end_none       enable_none
-
-struct hw_interrupt_type no_irq_type = {
-       "none",
-       startup_none,
-       shutdown_none,
-       enable_none,
-       disable_none,
-       ack_none,
-       end_none
-};
-
-atomic_t irq_err_count;
-#ifdef CONFIG_X86_IO_APIC
-#ifdef APIC_MISMATCH_DEBUG
-atomic_t irq_mis_count;
-#endif
-#endif
-
-/*
- * Generic, controller-independent functions:
- */
-
-int get_irq_list(char *buf)
-{
-       int i, j;
-       struct irqaction * action;
-       char *p = buf;
-
-       p += sprintf(p, "           ");
-       for (j=0; j<smp_num_cpus; j++)
-               p += sprintf(p, "CPU%d       ",j);
-       *p++ = '\n';
-
-       for (i = 0 ; i < NR_IRQS ; i++) {
-               action = irq_desc[i].action;
-               if (!action) 
-                       continue;
-               p += sprintf(p, "%3d: ",i);
-#ifndef CONFIG_SMP
-               p += sprintf(p, "%10u ", kstat_irqs(i));
-#else
-               for (j = 0; j < smp_num_cpus; j++)
-                       p += sprintf(p, "%10u ",
-                               kstat.irqs[cpu_logical_map(j)][i]);
-#endif
-               p += sprintf(p, " %14s", irq_desc[i].handler->typename);
-               p += sprintf(p, "  %s", action->name);
-
-               for (action=action->next; action; action = action->next)
-                       p += sprintf(p, ", %s", action->name);
-               *p++ = '\n';
-       }
-       p += sprintf(p, "NMI: ");
-       for (j = 0; j < smp_num_cpus; j++)
-               p += sprintf(p, "%10u ",
-                       nmi_count(cpu_logical_map(j)));
-       p += sprintf(p, "\n");
-#if CONFIG_X86_LOCAL_APIC
-       p += sprintf(p, "LOC: ");
-       for (j = 0; j < smp_num_cpus; j++)
-               p += sprintf(p, "%10u ",
-                       apic_timer_irqs[cpu_logical_map(j)]);
-       p += sprintf(p, "\n");
-#endif
-       p += sprintf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
-#ifdef CONFIG_X86_IO_APIC
-#ifdef APIC_MISMATCH_DEBUG
-       p += sprintf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
-#endif
-#endif
-       return p - buf;
-}
-
-
-/*
- * Global interrupt locks for SMP. Allow interrupts to come in on any
- * CPU, yet make cli/sti act globally to protect critical regions..
- */
-
-#ifdef CONFIG_SMP
-unsigned char global_irq_holder = NO_PROC_ID;
-unsigned volatile long global_irq_lock; /* pendantic: long for set_bit --RR */
-
-extern void show_stack(unsigned long* esp);
-
-static void show(char * str)
-{
-       int i;
-       int cpu = smp_processor_id();
-
-       printk("\n%s, CPU %d:\n", str, cpu);
-       printk("irq:  %d [",irqs_running());
-       for(i=0;i < smp_num_cpus;i++)
-               printk(" %d",local_irq_count(i));
-       printk(" ]\nbh:   %d [",spin_is_locked(&global_bh_lock) ? 1 : 0);
-       for(i=0;i < smp_num_cpus;i++)
-               printk(" %d",local_bh_count(i));
-
-       printk(" ]\nStack dumps:");
-       for(i = 0; i < smp_num_cpus; i++) {
-               unsigned long esp;
-               if (i == cpu)
-                       continue;
-               printk("\nCPU %d:",i);
-               esp = init_tss[i].esp0;
-               if (!esp) {
-                       /* tss->esp0 is set to NULL in cpu_init(),
-                        * it's initialized when the cpu returns to user
-                        * space. -- manfreds
-                        */
-                       printk(" <unknown> ");
-                       continue;
-               }
-               esp &= ~(THREAD_SIZE-1);
-               esp += sizeof(struct task_struct);
-               show_stack((void*)esp);
-       }
-       printk("\nCPU %d:",cpu);
-       show_stack(NULL);
-       printk("\n");
-}
-       
-#define MAXCOUNT 100000000
-
-/*
- * I had a lockup scenario where a tight loop doing
- * spin_unlock()/spin_lock() on CPU#1 was racing with
- * spin_lock() on CPU#0. CPU#0 should have noticed spin_unlock(), but
- * apparently the spin_unlock() information did not make it
- * through to CPU#0 ... nasty, is this by design, do we have to limit
- * 'memory update oscillation frequency' artificially like here?
- *
- * Such 'high frequency update' races can be avoided by careful design, but
- * some of our major constructs like spinlocks use similar techniques,
- * it would be nice to clarify this issue. Set this define to 0 if you
- * want to check whether your system freezes.  I suspect the delay done
- * by SYNC_OTHER_CORES() is in correlation with 'snooping latency', but
- * i thought that such things are guaranteed by design, since we use
- * the 'LOCK' prefix.
- */
-#define SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND 0
-
-#if SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND
-# define SYNC_OTHER_CORES(x) udelay(x+1)
-#else
-/*
- * We have to allow irqs to arrive between __sti and __cli
- */
-# define SYNC_OTHER_CORES(x) __asm__ __volatile__ ("nop")
-#endif
-
-static inline void wait_on_irq(int cpu)
-{
-       int count = MAXCOUNT;
-
-       for (;;) {
-
-               /*
-                * Wait until all interrupts are gone. Wait
-                * for bottom half handlers unless we're
-                * already executing in one..
-                */
-               if (!irqs_running())
-                       if (local_bh_count(cpu) || !spin_is_locked(&global_bh_lock))
-                               break;
-
-               /* Duh, we have to loop. Release the lock to avoid deadlocks */
-               clear_bit(0,&global_irq_lock);
-
-               for (;;) {
-                       if (!--count) {
-                               show("wait_on_irq");
-                               count = ~0;
-                       }
-                       __sti();
-                       SYNC_OTHER_CORES(cpu);
-                       __cli();
-                       if (irqs_running())
-                               continue;
-                       if (global_irq_lock)
-                               continue;
-                       if (!local_bh_count(cpu) && spin_is_locked(&global_bh_lock))
-                               continue;
-                       if (!test_and_set_bit(0,&global_irq_lock))
-                               break;
-               }
-       }
-}
-
-/*
- * This is called when we want to synchronize with
- * interrupts. We may for example tell a device to
- * stop sending interrupts: but to make sure there
- * are no interrupts that are executing on another
- * CPU we need to call this function.
- */
-void synchronize_irq(void)
-{
-       if (irqs_running()) {
-               /* Stupid approach */
-               cli();
-               sti();
-       }
-}
-
-static inline void get_irqlock(int cpu)
-{
-#ifdef CONFIG_KDB
-       static int kdb_rate;
-       if (KDB_IS_RUNNING() && kdb_rate++ < 10)
-               kdb_printf("Warning: get_irqlock on cpu %d while kdb is running, may hang\n", smp_processor_id());
-#endif /* CONFIG_KDB */
-       if (test_and_set_bit(0,&global_irq_lock)) {
-               /* do we already hold the lock? */
-               if ((unsigned char) cpu == global_irq_holder)
-                       return;
-               /* Uhhuh.. Somebody else got it. Wait.. */
-               do {
-                       do {
-                               rep_nop();
-                       } while (test_bit(0,&global_irq_lock));
-               } while (test_and_set_bit(0,&global_irq_lock));         
-       }
-       /* 
-        * We also to make sure that nobody else is running
-        * in an interrupt context. 
-        */
-       wait_on_irq(cpu);
-
-       /*
-        * Ok, finally..
-        */
-       global_irq_holder = cpu;
-}
-
-void __global_cli(void)
-{
-    panic("__global_cli");
-}
-
-void __global_sti(void)
-{
-    panic("__global_sti");
-}
-
-/*
- * SMP flags value to restore to:
- * 0 - global cli
- * 1 - global sti
- * 2 - local cli
- * 3 - local sti
- */
-unsigned long __global_save_flags(void)
-{
-    panic("__global_save_flags");
-}
-
-void __global_restore_flags(unsigned long flags)
-{
-    panic("__global_restore_flags");
-}
-
-#endif
-
-/*
- * This should really return information about whether
- * we should do bottom half handling etc. Right now we
- * end up _always_ checking the bottom half, which is a
- * waste of time and is not what some drivers would
- * prefer.
- */
-int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction * action)
-{
-       int status;
-       int cpu = smp_processor_id();
-
-       irq_enter(cpu, irq);
-
-       status = 1;     /* Force the "do bottom halves" bit */
-
-       if (!(action->flags & SA_INTERRUPT))
-               __sti();
-
-       do {
-               status |= action->flags;
-               action->handler(irq, action->dev_id, regs);
-               action = action->next;
-       } while (action);
-       if (status & SA_SAMPLE_RANDOM)
-               add_interrupt_randomness(irq);
-       __cli();
-
-       irq_exit(cpu, irq);
-
-       return status;
-}
-
-/*
- * Generic enable/disable code: this just calls
- * down into the PIC-specific version for the actual
- * hardware disable after having gotten the irq
- * controller lock. 
- */
-/**
- *     disable_irq_nosync - disable an irq without waiting
- *     @irq: Interrupt to disable
- *
- *     Disable the selected interrupt line.  Disables and Enables are
- *     nested.
- *     Unlike disable_irq(), this function does not ensure existing
- *     instances of the IRQ handler have completed before returning.
- *
- *     This function may be called from IRQ context.
- */
-inline void disable_irq_nosync(unsigned int irq)
-{
-       irq_desc_t *desc = irq_desc + irq;
-       unsigned long flags;
-
-       spin_lock_irqsave(&desc->lock, flags);
-       if (!desc->depth++) {
-               desc->status |= IRQ_DISABLED;
-               desc->handler->disable(irq);
-       }
-       spin_unlock_irqrestore(&desc->lock, flags);
-}
-
-/**
- *     disable_irq - disable an irq and wait for completion
- *     @irq: Interrupt to disable
- *
- *     Disable the selected interrupt line.  Enables and Disables are
- *     nested.
- *     This function waits for any pending IRQ handlers for this interrupt
- *     to complete before returning. If you use this function while
- *     holding a resource the IRQ handler may need you will deadlock.
- *
- *     This function may be called - with care - from IRQ context.
- */
-void disable_irq(unsigned int irq)
-{
-       disable_irq_nosync(irq);
-
-       if (!local_irq_count(smp_processor_id())) {
-               do {
-                       barrier();
-                       cpu_relax();
-               } while (irq_desc[irq].status & IRQ_INPROGRESS);
-       }
-}
-
-/**
- *     enable_irq - enable handling of an irq
- *     @irq: Interrupt to enable
- *
- *     Undoes the effect of one call to disable_irq().  If this
- *     matches the last disable, processing of interrupts on this
- *     IRQ line is re-enabled.
- *
- *     This function may be called from IRQ context.
- */
-void enable_irq(unsigned int irq)
-{
-       irq_desc_t *desc = irq_desc + irq;
-       unsigned long flags;
-
-       spin_lock_irqsave(&desc->lock, flags);
-       switch (desc->depth) {
-       case 1: {
-               unsigned int status = desc->status & ~IRQ_DISABLED;
-               desc->status = status;
-               if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
-                       desc->status = status | IRQ_REPLAY;
-                       hw_resend_irq(desc->handler,irq);
-               }
-               desc->handler->enable(irq);
-               /* fall-through */
-       }
-       default:
-               desc->depth--;
-               break;
-       case 0:
-               printk("enable_irq(%u) unbalanced from %p\n", irq,
-                      __builtin_return_address(0));
-       }
-       spin_unlock_irqrestore(&desc->lock, flags);
-}
-
-/*
- * do_IRQ handles all normal device IRQ's (the special
- * SMP cross-CPU interrupts have their own specific
- * handlers).
- */
-asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs)
-{      
-       /* 
-        * We ack quickly, we don't want the irq controller
-        * thinking we're snobs just because some other CPU has
-        * disabled global interrupts (we have already done the
-        * INT_ACK cycles, it's too late to try to pretend to the
-        * controller that we aren't taking the interrupt).
-        *
-        * 0 return value means that this irq is already being
-        * handled by some other CPU. (or is disabled)
-        */
-       int cpu = smp_processor_id();
-       irq_desc_t *desc = irq_desc + irq;
-       struct irqaction * action;
-       unsigned int status;
-
-       kstat.irqs[cpu][irq]++;
-       spin_lock(&desc->lock);
-       desc->handler->ack(irq);
-       /*
-          REPLAY is when Linux resends an IRQ that was dropped earlier
-          WAITING is used by probe to mark irqs that are being tested
-          */
-       status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
-       status |= IRQ_PENDING; /* we _want_ to handle it */
-
-       /*
-        * If the IRQ is disabled for whatever reason, we cannot
-        * use the action we have.
-        */
-       action = NULL;
-       if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
-               action = desc->action;
-               status &= ~IRQ_PENDING; /* we commit to handling */
-               status |= IRQ_INPROGRESS; /* we are handling it */
-       }
-       desc->status = status;
-
-       /*
-        * If there is no IRQ handler or it was disabled, exit early.
-          Since we set PENDING, if another processor is handling
-          a different instance of this same irq, the other processor
-          will take care of it.
-        */
-       if (!action)
-               goto out;
-
-       /*
-        * Edge triggered interrupts need to remember
-        * pending events.
-        * This applies to any hw interrupts that allow a second
-        * instance of the same irq to arrive while we are in do_IRQ
-        * or in the handler. But the code here only handles the _second_
-        * instance of the irq, not the third or fourth. So it is mostly
-        * useful for irq hardware that does not mask cleanly in an
-        * SMP environment.
-        */
-       for (;;) {
-               spin_unlock(&desc->lock);
-               handle_IRQ_event(irq, regs, action);
-               spin_lock(&desc->lock);
-               
-               if (!(desc->status & IRQ_PENDING))
-                       break;
-               desc->status &= ~IRQ_PENDING;
-       }
-       desc->status &= ~IRQ_INPROGRESS;
-out:
-       /*
-        * The ->end() handler has to deal with interrupts which got
-        * disabled while the handler was running.
-        */
-       desc->handler->end(irq);
-       spin_unlock(&desc->lock);
-
-       if (softirq_pending(cpu))
-               do_softirq();
-
-       return 1;
-}
-
-/**
- *     request_irq - allocate an interrupt line
- *     @irq: Interrupt line to allocate
- *     @handler: Function to be called when the IRQ occurs
- *     @irqflags: Interrupt type flags
- *     @devname: An ascii name for the claiming device
- *     @dev_id: A cookie passed back to the handler function
- *
- *     This call allocates interrupt resources and enables the
- *     interrupt line and IRQ handling. From the point this
- *     call is made your handler function may be invoked. Since
- *     your handler function must clear any interrupt the board 
- *     raises, you must take care both to initialise your hardware
- *     and to set up the interrupt handler in the right order.
- *
- *     Dev_id must be globally unique. Normally the address of the
- *     device data structure is used as the cookie. Since the handler
- *     receives this value it makes sense to use it.
- *
- *     If your interrupt is shared you must pass a non NULL dev_id
- *     as this is required when freeing the interrupt.
- *
- *     Flags:
- *
- *     SA_SHIRQ                Interrupt is shared
- *
- *     SA_INTERRUPT            Disable local interrupts while processing
- *
- *     SA_SAMPLE_RANDOM        The interrupt can be used for entropy
- *
- */
-int request_irq(unsigned int irq, 
-               void (*handler)(int, void *, struct pt_regs *),
-               unsigned long irqflags, 
-               const char * devname,
-               void *dev_id)
-{
-       int retval;
-       struct irqaction * action;
-
-#if 1
-       /*
-        * Sanity-check: shared interrupts should REALLY pass in
-        * a real dev-ID, otherwise we'll have trouble later trying
-        * to figure out which interrupt is which (messes up the
-        * interrupt freeing logic etc).
-        */
-       if (irqflags & SA_SHIRQ) {
-               if (!dev_id)
-                       printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]);
-       }
-#endif
-
-       if (irq >= NR_IRQS)
-               return -EINVAL;
-       if (!handler)
-               return -EINVAL;
-
-       action = (struct irqaction *)
-                       kmalloc(sizeof(struct irqaction), GFP_KERNEL);
-       if (!action)
-               return -ENOMEM;
-
-       action->handler = handler;
-       action->flags = irqflags;
-       action->mask = 0;
-       action->name = devname;
-       action->next = NULL;
-       action->dev_id = dev_id;
-
-       retval = setup_irq(irq, action);
-       if (retval)
-               kfree(action);
-       return retval;
-}
-
-/**
- *     free_irq - free an interrupt
- *     @irq: Interrupt line to free
- *     @dev_id: Device identity to free
- *
- *     Remove an interrupt handler. The handler is removed and if the
- *     interrupt line is no longer in use by any driver it is disabled.
- *     On a shared IRQ the caller must ensure the interrupt is disabled
- *     on the card it drives before calling this function. The function
- *     does not return until any executing interrupts for this IRQ
- *     have completed.
- *
- *     This function may be called from interrupt context. 
- *
- *     Bugs: Attempting to free an irq in a handler for the same irq hangs
- *           the machine.
- */
-void free_irq(unsigned int irq, void *dev_id)
-{
-       irq_desc_t *desc;
-       struct irqaction **p;
-       unsigned long flags;
-
-       if (irq >= NR_IRQS)
-               return;
-
-       desc = irq_desc + irq;
-       spin_lock_irqsave(&desc->lock,flags);
-       p = &desc->action;
-       for (;;) {
-               struct irqaction * action = *p;
-               if (action) {
-                       struct irqaction **pp = p;
-                       p = &action->next;
-                       if (action->dev_id != dev_id)
-                               continue;
-
-                       /* Found it - now remove it from the list of entries */
-                       *pp = action->next;
-                       if (!desc->action) {
-                               desc->status |= IRQ_DISABLED;
-                               desc->handler->shutdown(irq);
-                       }
-                       spin_unlock_irqrestore(&desc->lock,flags);
-
-#ifdef CONFIG_SMP
-                       /* Wait to make sure it's not being used on another CPU */
-                       while (desc->status & IRQ_INPROGRESS) {
-                               barrier();
-                               cpu_relax();
-                       }
-#endif
-                       kfree(action);
-                       return;
-               }
-               printk("Trying to free free IRQ%d\n",irq);
-               spin_unlock_irqrestore(&desc->lock,flags);
-               return;
-       }
-}
-
-/*
- * IRQ autodetection code..
- *
- * This depends on the fact that any interrupt that
- * comes in on to an unassigned handler will get stuck
- * with "IRQ_WAITING" cleared and the interrupt
- * disabled.
- */
-
-static DECLARE_MUTEX(probe_sem);
-
-/**
- *     probe_irq_on    - begin an interrupt autodetect
- *
- *     Commence probing for an interrupt. The interrupts are scanned
- *     and a mask of potential interrupt lines is returned.
- *
- */
-unsigned long probe_irq_on(void)
-{
-       unsigned int i;
-       irq_desc_t *desc;
-       unsigned long val;
-       unsigned long delay;
-
-       down(&probe_sem);
-       /* 
-        * something may have generated an irq long ago and we want to
-        * flush such a longstanding irq before considering it as spurious. 
-        */
-       for (i = NR_IRQS-1; i > 0; i--)  {
-               desc = irq_desc + i;
-
-               spin_lock_irq(&desc->lock);
-               if (!irq_desc[i].action) 
-                       irq_desc[i].handler->startup(i);
-               spin_unlock_irq(&desc->lock);
-       }
-
-       /* Wait for longstanding interrupts to trigger. */
-       for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
-               /* about 20ms delay */ synchronize_irq();
-
-       /*
-        * enable any unassigned irqs
-        * (we must startup again here because if a longstanding irq
-        * happened in the previous stage, it may have masked itself)
-        */
-       for (i = NR_IRQS-1; i > 0; i--) {
-               desc = irq_desc + i;
-
-               spin_lock_irq(&desc->lock);
-               if (!desc->action) {
-                       desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
-                       if (desc->handler->startup(i))
-                               desc->status |= IRQ_PENDING;
-               }
-               spin_unlock_irq(&desc->lock);
-       }
-
-       /*
-        * Wait for spurious interrupts to trigger
-        */
-       for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
-               /* about 100ms delay */ synchronize_irq();
-
-       /*
-        * Now filter out any obviously spurious interrupts
-        */
-       val = 0;
-       for (i = 0; i < NR_IRQS; i++) {
-               irq_desc_t *desc = irq_desc + i;
-               unsigned int status;
-
-               spin_lock_irq(&desc->lock);
-               status = desc->status;
-
-               if (status & IRQ_AUTODETECT) {
-                       /* It triggered already - consider it spurious. */
-                       if (!(status & IRQ_WAITING)) {
-                               desc->status = status & ~IRQ_AUTODETECT;
-                               desc->handler->shutdown(i);
-                       } else
-                               if (i < 32)
-                                       val |= 1 << i;
-               }
-               spin_unlock_irq(&desc->lock);
-       }
-
-       return val;
-}
-
-/*
- * Return a mask of triggered interrupts (this
- * can handle only legacy ISA interrupts).
- */
-/**
- *     probe_irq_mask - scan a bitmap of interrupt lines
- *     @val:   mask of interrupts to consider
- *
- *     Scan the ISA bus interrupt lines and return a bitmap of
- *     active interrupts. The interrupt probe logic state is then
- *     returned to its previous value.
- *
- *     Note: we need to scan all the irq's even though we will
- *     only return ISA irq numbers - just so that we reset them
- *     all to a known state.
- */
-unsigned int probe_irq_mask(unsigned long val)
-{
-       int i;
-       unsigned int mask;
-
-       mask = 0;
-       for (i = 0; i < NR_IRQS; i++) {
-               irq_desc_t *desc = irq_desc + i;
-               unsigned int status;
-
-               spin_lock_irq(&desc->lock);
-               status = desc->status;
-
-               if (status & IRQ_AUTODETECT) {
-                       if (i < 16 && !(status & IRQ_WAITING))
-                               mask |= 1 << i;
-
-                       desc->status = status & ~IRQ_AUTODETECT;
-                       desc->handler->shutdown(i);
-               }
-               spin_unlock_irq(&desc->lock);
-       }
-       up(&probe_sem);
-
-       return mask & val;
-}
-
-/*
- * Return the one interrupt that triggered (this can
- * handle any interrupt source).
- */
-
-/**
- *     probe_irq_off   - end an interrupt autodetect
- *     @val: mask of potential interrupts (unused)
- *
- *     Scans the unused interrupt lines and returns the line which
- *     appears to have triggered the interrupt. If no interrupt was
- *     found then zero is returned. If more than one interrupt is
- *     found then minus the first candidate is returned to indicate
- *     their is doubt.
- *
- *     The interrupt probe logic state is returned to its previous
- *     value.
- *
- *     BUGS: When used in a module (which arguably shouldnt happen)
- *     nothing prevents two IRQ probe callers from overlapping. The
- *     results of this are non-optimal.
- */
-int probe_irq_off(unsigned long val)
-{
-       int i, irq_found, nr_irqs;
-
-       nr_irqs = 0;
-       irq_found = 0;
-       for (i = 0; i < NR_IRQS; i++) {
-               irq_desc_t *desc = irq_desc + i;
-               unsigned int status;
-
-               spin_lock_irq(&desc->lock);
-               status = desc->status;
-
-               if (status & IRQ_AUTODETECT) {
-                       if (!(status & IRQ_WAITING)) {
-                               if (!nr_irqs)
-                                       irq_found = i;
-                               nr_irqs++;
-                       }
-                       desc->status = status & ~IRQ_AUTODETECT;
-                       desc->handler->shutdown(i);
-               }
-               spin_unlock_irq(&desc->lock);
-       }
-       up(&probe_sem);
-
-       if (nr_irqs > 1)
-               irq_found = -irq_found;
-       return irq_found;
-}
-
-/* this was setup_x86_irq but it seems pretty generic */
-int setup_irq(unsigned int irq, struct irqaction * new)
-{
-       int shared = 0;
-       unsigned long flags;
-       struct irqaction *old, **p;
-       irq_desc_t *desc = irq_desc + irq;
-
-       /*
-        * Some drivers like serial.c use request_irq() heavily,
-        * so we have to be careful not to interfere with a
-        * running system.
-        */
-       if (new->flags & SA_SAMPLE_RANDOM) {
-               /*
-                * This function might sleep, we want to call it first,
-                * outside of the atomic block.
-                * Yes, this might clear the entropy pool if the wrong
-                * driver is attempted to be loaded, without actually
-                * installing a new handler, but is this really a problem,
-                * only the sysadmin is able to do this.
-                */
-               rand_initialize_irq(irq);
-       }
-
-       /*
-        * The following block of code has to be executed atomically
-        */
-       spin_lock_irqsave(&desc->lock,flags);
-       p = &desc->action;
-       if ((old = *p) != NULL) {
-               /* Can't share interrupts unless both agree to */
-               if (!(old->flags & new->flags & SA_SHIRQ)) {
-                       spin_unlock_irqrestore(&desc->lock,flags);
-                       return -EBUSY;
-               }
-
-               /* add new interrupt at end of irq queue */
-               do {
-                       p = &old->next;
-                       old = *p;
-               } while (old);
-               shared = 1;
-       }
-
-       *p = new;
-
-       if (!shared) {
-               desc->depth = 0;
-               desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING);
-               desc->handler->startup(irq);
-       }
-       spin_unlock_irqrestore(&desc->lock,flags);
-
-       register_irq_proc(irq);
-       return 0;
-}
-
-static struct proc_dir_entry * root_irq_dir;
-static struct proc_dir_entry * irq_dir [NR_IRQS];
-
-#define HEX_DIGITS 8
-
-static unsigned int parse_hex_value (const char *buffer,
-               unsigned long count, unsigned long *ret)
-{
-       unsigned char hexnum [HEX_DIGITS];
-       unsigned long value;
-       int i;
-
-       if (!count)
-               return -EINVAL;
-       if (count > HEX_DIGITS)
-               count = HEX_DIGITS;
-       if (copy_from_user(hexnum, buffer, count))
-               return -EFAULT;
-
-       /*
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
-       value = 0;
-
-       for (i = 0; i < count; i++) {
-               unsigned int c = hexnum[i];
-
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-                       case 'a' ... 'f': c -= 'a'-10; break;
-                       case 'A' ... 'F': c -= 'A'-10; break;
-               default:
-                       goto out;
-               }
-               value = (value << 4) | c;
-       }
-out:
-       *ret = value;
-       return 0;
-}
-
-#if CONFIG_SMP
-
-static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
-static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
-{
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
-       return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-}
-
-static int irq_affinity_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
-{
-       int irq = (long) data, full_count = count, err;
-       unsigned long new_value;
-
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-
-       err = parse_hex_value(buffer, count, &new_value);
-
-       /*
-        * Do not allow disabling IRQs completely - it's a too easy
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
-       if (!(new_value & cpu_online_map))
-               return -EINVAL;
-
-       irq_affinity[irq] = new_value;
-       irq_desc[irq].handler->set_affinity(irq, new_value);
-
-       return full_count;
-}
-
-#endif
-
-static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
-{
-       unsigned long *mask = (unsigned long *) data;
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
-       return sprintf (page, "%08lx\n", *mask);
-}
-
-static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
-{
-       unsigned long *mask = (unsigned long *) data, full_count = count, err;
-       unsigned long new_value;
-
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
-               return err;
-
-       *mask = new_value;
-       return full_count;
-}
-
-#define MAX_NAMELEN 10
-
-static void register_irq_proc (unsigned int irq)
-{
-       char name [MAX_NAMELEN];
-
-       if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
-                       irq_dir[irq])
-               return;
-
-       memset(name, 0, MAX_NAMELEN);
-       sprintf(name, "%d", irq);
-
-       /* create /proc/irq/1234 */
-       irq_dir[irq] = proc_mkdir(name, root_irq_dir);
-
-#if CONFIG_SMP
-       {
-               struct proc_dir_entry *entry;
-
-               /* create /proc/irq/1234/smp_affinity */
-               entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
-
-               if (entry) {
-                       entry->nlink = 1;
-                       entry->data = (void *)(long)irq;
-                       entry->read_proc = irq_affinity_read_proc;
-                       entry->write_proc = irq_affinity_write_proc;
-               }
-
-               smp_affinity_entry[irq] = entry;
-       }
-#endif
-}
-
-unsigned long prof_cpu_mask = -1;
-
-void init_irq_proc (void)
-{
-       struct proc_dir_entry *entry;
-       int i;
-
-       /* create /proc/irq */
-       root_irq_dir = proc_mkdir("irq", 0);
-
-       /* create /proc/irq/prof_cpu_mask */
-       entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
-
-       if (!entry)
-           return;
-
-       entry->nlink = 1;
-       entry->data = (void *)&prof_cpu_mask;
-       entry->read_proc = prof_cpu_mask_read_proc;
-       entry->write_proc = prof_cpu_mask_write_proc;
-
-       /*
-        * Create entries for all existing IRQs.
-        */
-       for (i = 0; i < NR_IRQS; i++)
-               register_irq_proc(i);
-}
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ldt.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ldt.c
deleted file mode 100644 (file)
index 6c93943..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * linux/kernel/ldt.c
- *
- * Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
- * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
- */
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-
-/*
- * XXX KAF (28/7/02): This stuff is only used for DOS emulation, and is
- * the default way of finding current TCB in linuxthreads. Supporting
- * table update svia the hypervisor is feasible, but a hassle: for now,
- * recompiling linuxthreads is the most sensible option.
- * 
- * Oh, this may become an issue depending on what JVM we use for
- * running the xeno-daemon.
- */
-
-asmlinkage int sys_modify_ldt(int func, void *ptr, unsigned long bytecount)
-{
-    return -ENOSYS;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/process.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/process.c
deleted file mode 100644 (file)
index 87c5205..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- *  linux/arch/i386/kernel/process.c
- *
- *  Copyright (C) 1995  Linus Torvalds
- *
- *  Pentium III FXSR, SSE support
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-/*
- * This file handles the architecture-dependent parts of process handling..
- */
-
-#define __KERNEL_SYSCALLS__
-#include <stdarg.h>
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/stddef.h>
-#include <linux/unistd.h>
-#include <linux/ptrace.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/user.h>
-#include <linux/a.out.h>
-#include <linux/interrupt.h>
-#include <linux/config.h>
-#include <linux/delay.h>
-#include <linux/reboot.h>
-#include <linux/init.h>
-#include <linux/mc146818rtc.h>
-#include <linux/kdb.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/ldt.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/desc.h>
-#include <asm/mmu_context.h>
-
-#include <linux/irq.h>
-
-asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
-
-int hlt_counter;
-
-/*
- * Powermanagement idle function, if any..
- */
-void (*pm_idle)(void);
-
-/*
- * Power off function, if any
- */
-void (*pm_power_off)(void);
-
-void disable_hlt(void)
-{
-    hlt_counter++;
-}
-
-void enable_hlt(void)
-{
-    hlt_counter--;
-}
-
-/*
- * The idle thread. There's no useful work to be
- * done, so just try to conserve power and have a
- * low exit latency (ie sit in a loop waiting for
- * somebody to say that they'd like to reschedule)
- */
-void cpu_idle (void)
-{
-    /* endless idle loop with no priority at all */
-    init_idle();
-    current->nice = 20;
-    current->counter = -100;
-
-    while (1) {
-        while (!current->need_resched)
-            HYPERVISOR_do_sched_op(NULL);
-        schedule();
-        check_pgt_cache();
-    }
-}
-
-void machine_restart(char * __unused)
-{
-    HYPERVISOR_exit();
-}
-
-void machine_halt(void)
-{
-    HYPERVISOR_exit();
-}
-
-void machine_power_off(void)
-{
-    HYPERVISOR_exit();
-}
-
-extern void show_trace(unsigned long* esp);
-
-void show_regs(struct pt_regs * regs)
-{
-    printk("\n");
-    printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
-    printk("EIP: %04x:[<%08lx>] CPU: %d",0xffff & regs->xcs,regs->eip, smp_processor_id());
-    if (regs->xcs & 2)
-        printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
-    printk(" EFLAGS: %08lx    %s\n",regs->eflags, print_tainted());
-    printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
-           regs->eax,regs->ebx,regs->ecx,regs->edx);
-    printk("ESI: %08lx EDI: %08lx EBP: %08lx",
-           regs->esi, regs->edi, regs->ebp);
-    printk(" DS: %04x ES: %04x\n",
-           0xffff & regs->xds,0xffff & regs->xes);
-
-    show_trace(&regs->esp);
-}
-
-/*
- * No need to lock the MM as we are the last user
- */
-void release_segments(struct mm_struct *mm)
-{
-    void * ldt = mm->context.segments;
-
-    /*
-     * free the LDT
-     */
-    if (ldt) {
-        mm->context.segments = NULL;
-        clear_LDT();
-        vfree(ldt);
-    }
-}
-
-/*
- * Create a kernel thread
- */
-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
-{
-    long retval, d0;
-
-    __asm__ __volatile__(
-        "movl %%esp,%%esi\n\t"
-        "int $0x80\n\t"                /* Linux/i386 system call */
-        "cmpl %%esp,%%esi\n\t" /* child or parent? */
-        "je 1f\n\t"            /* parent - jump */
-        /* Load the argument into eax, and push it.  That way, it does
-         * not matter whether the called function is compiled with
-         * -mregparm or not.  */
-        "movl %4,%%eax\n\t"
-        "pushl %%eax\n\t"              
-        "call *%5\n\t"         /* call fn */
-        "movl %3,%0\n\t"       /* exit */
-        "int $0x80\n"
-        "1:\t"
-        :"=&a" (retval), "=&S" (d0)
-        :"0" (__NR_clone), "i" (__NR_exit),
-        "r" (arg), "r" (fn),
-        "b" (flags | CLONE_VM)
-        : "memory");
-
-    return retval;
-}
-
-/*
- * Free current thread data structures etc..
- */
-void exit_thread(void)
-{
-    /* nothing to do ... */
-}
-
-void flush_thread(void)
-{
-    struct task_struct *tsk = current;
-
-    memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
-
-    /*
-     * Forget coprocessor state..
-     */
-    clear_fpu(tsk);
-    tsk->used_math = 0;
-}
-
-void release_thread(struct task_struct *dead_task)
-{
-    if (dead_task->mm) {
-        void * ldt = dead_task->mm->context.segments;
-
-        // temporary debugging check
-        if (ldt) {
-            printk("WARNING: dead process %8s still has LDT? <%p>\n",
-                   dead_task->comm, ldt);
-            BUG();
-        }
-    }
-}
-
-/*
- * we do not have to muck with descriptors here, that is
- * done in switch_mm() as needed.
- */
-void copy_segments(struct task_struct *p, struct mm_struct *new_mm)
-{
-    struct mm_struct * old_mm;
-    void *old_ldt, *ldt;
-
-    ldt = NULL;
-    old_mm = current->mm;
-    if (old_mm && (old_ldt = old_mm->context.segments) != NULL) {
-        /*
-         * Completely new LDT, we initialize it from the parent:
-         */
-        ldt = vmalloc(LDT_ENTRIES*LDT_ENTRY_SIZE);
-        if (!ldt)
-            printk(KERN_WARNING "ldt allocation failed\n");
-        else
-            memcpy(ldt, old_ldt, LDT_ENTRIES*LDT_ENTRY_SIZE);
-    }
-    new_mm->context.segments = ldt;
-    new_mm->context.cpuvalid = ~0UL;   /* valid on all CPU's - they can't have stale data */
-}
-
-/*
- * Save a segment.
- */
-#define savesegment(seg,value) \
-       asm volatile("movl %%" #seg ",%0":"=m" (*(int *)&(value)))
-
-int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
-                unsigned long unused,
-                struct task_struct * p, struct pt_regs * regs)
-{
-    struct pt_regs * childregs;
-
-    childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
-    struct_cpy(childregs, regs);
-    childregs->eax = 0;
-    childregs->esp = esp;
-
-    p->thread.esp = (unsigned long) childregs;
-    p->thread.esp0 = (unsigned long) (childregs+1);
-
-    p->thread.eip = (unsigned long) ret_from_fork;
-
-    savesegment(fs,p->thread.fs);
-    savesegment(gs,p->thread.gs);
-
-    unlazy_fpu(current);
-    struct_cpy(&p->thread.i387, &current->thread.i387);
-
-    return 0;
-}
-
-/*
- * fill in the user structure for a core dump..
- */
-void dump_thread(struct pt_regs * regs, struct user * dump)
-{
-    int i;
-
-/* changed the size calculations - should hopefully work better. lbt */
-    dump->magic = CMAGIC;
-    dump->start_code = 0;
-    dump->start_stack = regs->esp & ~(PAGE_SIZE - 1);
-    dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT;
-    dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT;
-    dump->u_dsize -= dump->u_tsize;
-    dump->u_ssize = 0;
-    for (i = 0; i < 8; i++)
-        dump->u_debugreg[i] = current->thread.debugreg[i];  
-
-    if (dump->start_stack < TASK_SIZE)
-        dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
-
-    dump->regs.ebx = regs->ebx;
-    dump->regs.ecx = regs->ecx;
-    dump->regs.edx = regs->edx;
-    dump->regs.esi = regs->esi;
-    dump->regs.edi = regs->edi;
-    dump->regs.ebp = regs->ebp;
-    dump->regs.eax = regs->eax;
-    dump->regs.ds = regs->xds;
-    dump->regs.es = regs->xes;
-    savesegment(fs,dump->regs.fs);
-    savesegment(gs,dump->regs.gs);
-    dump->regs.orig_eax = regs->orig_eax;
-    dump->regs.eip = regs->eip;
-    dump->regs.cs = regs->xcs;
-    dump->regs.eflags = regs->eflags;
-    dump->regs.esp = regs->esp;
-    dump->regs.ss = regs->xss;
-
-    dump->u_fpvalid = dump_fpu (regs, &dump->i387);
-}
-
-/*
- *     switch_to(x,yn) should switch tasks from x to y.
- *
- * We fsave/fwait so that an exception goes off at the right time
- * (as a call from the fsave or fwait in effect) rather than to
- * the wrong process. Lazy FP saving no longer makes any sense
- * with modern CPU's, and this simplifies a lot of things (SMP
- * and UP become the same).
- *
- * NOTE! We used to use the x86 hardware context switching. The
- * reason for not using it any more becomes apparent when you
- * try to recover gracefully from saved state that is no longer
- * valid (stale segment register values in particular). With the
- * hardware task-switch, there is no way to fix up bad state in
- * a reasonable manner.
- *
- * The fact that Intel documents the hardware task-switching to
- * be slow is a fairly red herring - this code is not noticeably
- * faster. However, there _is_ some room for improvement here,
- * so the performance issues may eventually be a valid point.
- * More important, however, is the fact that this allows us much
- * more flexibility.
- */
-void __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
-{
-    struct thread_struct *prev = &prev_p->thread,
-        *next = &next_p->thread;
-
-    unlazy_fpu(prev_p);
-
-    HYPERVISOR_stack_and_ldt_switch(__KERNEL_DS, next->esp0, 0);
-
-    /*
-     * Save away %fs and %gs. No need to save %es and %ds, as
-     * those are always kernel segments while inside the kernel.
-     */
-    asm volatile("movl %%fs,%0":"=m" (*(int *)&prev->fs));
-    asm volatile("movl %%gs,%0":"=m" (*(int *)&prev->gs));
-
-    /*
-     * Restore %fs and %gs.
-     */
-    loadsegment(fs, next->fs);
-    loadsegment(gs, next->gs);
-
-    /*
-     * Now maybe reload the debug registers
-     */
-    if ( next->debugreg[7] != 0 )
-    {
-        HYPERVISOR_set_debugreg(0, next->debugreg[0]);
-        HYPERVISOR_set_debugreg(1, next->debugreg[1]);
-        HYPERVISOR_set_debugreg(2, next->debugreg[2]);
-        HYPERVISOR_set_debugreg(3, next->debugreg[3]);
-        /* no 4 and 5 */
-        HYPERVISOR_set_debugreg(6, next->debugreg[6]);
-        HYPERVISOR_set_debugreg(7, next->debugreg[7]);
-    }
-}
-
-asmlinkage int sys_fork(struct pt_regs regs)
-{
-    return do_fork(SIGCHLD, regs.esp, &regs, 0);
-}
-
-asmlinkage int sys_clone(struct pt_regs regs)
-{
-    unsigned long clone_flags;
-    unsigned long newsp;
-
-    clone_flags = regs.ebx;
-    newsp = regs.ecx;
-    if (!newsp)
-        newsp = regs.esp;
-    return do_fork(clone_flags, newsp, &regs, 0);
-}
-
-/*
- * This is trivial, and on the face of it looks like it
- * could equally well be done in user mode.
- *
- * Not so, for quite unobvious reasons - register pressure.
- * In user mode vfork() cannot have a stack frame, and if
- * done by calling the "clone()" system call directly, you
- * do not have enough call-clobbered registers to hold all
- * the information you need.
- */
-asmlinkage int sys_vfork(struct pt_regs regs)
-{
-    return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, &regs, 0);
-}
-
-/*
- * sys_execve() executes a new program.
- */
-asmlinkage int sys_execve(struct pt_regs regs)
-{
-    int error;
-    char * filename;
-
-    filename = getname((char *) regs.ebx);
-    error = PTR_ERR(filename);
-    if (IS_ERR(filename))
-        goto out;
-    error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, &regs);
-    if (error == 0)
-        current->ptrace &= ~PT_DTRACE;
-    putname(filename);
- out:
-    return error;
-}
-
-/*
- * These bracket the sleeping functions..
- */
-extern void scheduling_functions_start_here(void);
-extern void scheduling_functions_end_here(void);
-#define first_sched    ((unsigned long) scheduling_functions_start_here)
-#define last_sched     ((unsigned long) scheduling_functions_end_here)
-
-unsigned long get_wchan(struct task_struct *p)
-{
-    unsigned long ebp, esp, eip;
-    unsigned long stack_page;
-    int count = 0;
-    if (!p || p == current || p->state == TASK_RUNNING)
-        return 0;
-    stack_page = (unsigned long)p;
-    esp = p->thread.esp;
-    if (!stack_page || esp < stack_page || esp > 8188+stack_page)
-        return 0;
-    /* include/asm-i386/system.h:switch_to() pushes ebp last. */
-    ebp = *(unsigned long *) esp;
-    do {
-        if (ebp < stack_page || ebp > 8184+stack_page)
-            return 0;
-        eip = *(unsigned long *) (ebp+4);
-        if (eip < first_sched || eip >= last_sched)
-            return eip;
-        ebp = *(unsigned long *) ebp;
-    } while (count++ < 16);
-    return 0;
-}
-#undef last_sched
-#undef first_sched
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ptrace.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/ptrace.c
deleted file mode 100644 (file)
index 0fe8689..0000000
+++ /dev/null
@@ -1,463 +0,0 @@
-/* ptrace.c */
-/* By Ross Biro 1/23/92 */
-/*
- * Pentium III FXSR, SSE support
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/errno.h>
-#include <linux/ptrace.h>
-#include <linux/user.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/system.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/debugreg.h>
-
-/*
- * does not yet catch signals sent when the child dies.
- * in exit.c or in signal.c.
- */
-
-/* determines which flags the user has access to. */
-/* 1 = access 0 = no access */
-#define FLAG_MASK 0x00044dd5
-
-/* set's the trap flag. */
-#define TRAP_FLAG 0x100
-
-/*
- * Offset of eflags on child stack..
- */
-#define EFL_OFFSET ((EFL-2)*4-sizeof(struct pt_regs))
-
-/*
- * this routine will get a word off of the processes privileged stack. 
- * the offset is how far from the base addr as stored in the TSS.  
- * this routine assumes that all the privileged stacks are in our
- * data space.
- */   
-static inline int get_stack_long(struct task_struct *task, int offset)
-{
-       unsigned char *stack;
-
-       stack = (unsigned char *)task->thread.esp0;
-       stack += offset;
-       return (*((int *)stack));
-}
-
-/*
- * this routine will put a word on the processes privileged stack. 
- * the offset is how far from the base addr as stored in the TSS.  
- * this routine assumes that all the privileged stacks are in our
- * data space.
- */
-static inline int put_stack_long(struct task_struct *task, int offset,
-       unsigned long data)
-{
-       unsigned char * stack;
-
-       stack = (unsigned char *) task->thread.esp0;
-       stack += offset;
-       *(unsigned long *) stack = data;
-       return 0;
-}
-
-static int putreg(struct task_struct *child,
-       unsigned long regno, unsigned long value)
-{
-       switch (regno >> 2) {
-               case FS:
-                       if (value && (value & 3) != 3)
-                               return -EIO;
-                       child->thread.fs = value;
-                       return 0;
-               case GS:
-                       if (value && (value & 3) != 3)
-                               return -EIO;
-                       child->thread.gs = value;
-                       return 0;
-               case DS:
-               case ES:
-                       if (value && (value & 3) != 3)
-                               return -EIO;
-                       value &= 0xffff;
-                       break;
-               case SS:
-               case CS:
-                       if ((value & 3) != 3)
-                               return -EIO;
-                       value &= 0xffff;
-                       break;
-               case EFL:
-                       value &= FLAG_MASK;
-                       value |= get_stack_long(child, EFL_OFFSET) & ~FLAG_MASK;
-                       break;
-       }
-       if (regno > GS*4)
-               regno -= 2*4;
-       put_stack_long(child, regno - sizeof(struct pt_regs), value);
-       return 0;
-}
-
-static unsigned long getreg(struct task_struct *child,
-       unsigned long regno)
-{
-       unsigned long retval = ~0UL;
-
-       switch (regno >> 2) {
-               case FS:
-                       retval = child->thread.fs;
-                       break;
-               case GS:
-                       retval = child->thread.gs;
-                       break;
-               case DS:
-               case ES:
-               case SS:
-               case CS:
-                       retval = 0xffff;
-                       /* fall through */
-               default:
-                       if (regno > GS*4)
-                               regno -= 2*4;
-                       regno = regno - sizeof(struct pt_regs);
-                       retval &= get_stack_long(child, regno);
-       }
-       return retval;
-}
-
-/*
- * Called by kernel/ptrace.c when detaching..
- *
- * Make sure the single step bit is not set.
- */
-void ptrace_disable(struct task_struct *child)
-{ 
-       long tmp;
-
-       tmp = get_stack_long(child, EFL_OFFSET) & ~TRAP_FLAG;
-       put_stack_long(child, EFL_OFFSET, tmp);
-}
-
-asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
-{
-       struct task_struct *child;
-       struct user * dummy = NULL;
-       int i, ret;
-
-       lock_kernel();
-       ret = -EPERM;
-       if (request == PTRACE_TRACEME) {
-               /* are we already being traced? */
-               if (current->ptrace & PT_PTRACED)
-                       goto out;
-               /* set the ptrace bit in the process flags. */
-               current->ptrace |= PT_PTRACED;
-               ret = 0;
-               goto out;
-       }
-       ret = -ESRCH;
-       read_lock(&tasklist_lock);
-       child = find_task_by_pid(pid);
-       if (child)
-               get_task_struct(child);
-       read_unlock(&tasklist_lock);
-       if (!child)
-               goto out;
-
-       ret = -EPERM;
-       if (pid == 1)           /* you may not mess with init */
-               goto out_tsk;
-
-       if (request == PTRACE_ATTACH) {
-               ret = ptrace_attach(child);
-               goto out_tsk;
-       }
-
-       ret = ptrace_check_attach(child, request == PTRACE_KILL);
-       if (ret < 0)
-               goto out_tsk;
-
-       switch (request) {
-       /* when I and D space are separate, these will need to be fixed. */
-       case PTRACE_PEEKTEXT: /* read word at location addr. */ 
-       case PTRACE_PEEKDATA: {
-               unsigned long tmp;
-               int copied;
-
-               copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
-               ret = -EIO;
-               if (copied != sizeof(tmp))
-                       break;
-               ret = put_user(tmp,(unsigned long *) data);
-               break;
-       }
-
-       /* read the word at location addr in the USER area. */
-       case PTRACE_PEEKUSR: {
-               unsigned long tmp;
-
-               ret = -EIO;
-               if ((addr & 3) || addr < 0 || 
-                   addr > sizeof(struct user) - 3)
-                       break;
-
-               tmp = 0;  /* Default return condition */
-               if(addr < FRAME_SIZE*sizeof(long))
-                       tmp = getreg(child, addr);
-               if(addr >= (long) &dummy->u_debugreg[0] &&
-                  addr <= (long) &dummy->u_debugreg[7]){
-                       addr -= (long) &dummy->u_debugreg[0];
-                       addr = addr >> 2;
-                       tmp = child->thread.debugreg[addr];
-               }
-               ret = put_user(tmp,(unsigned long *) data);
-               break;
-       }
-
-       /* when I and D space are separate, this will have to be fixed. */
-       case PTRACE_POKETEXT: /* write the word at location addr. */
-       case PTRACE_POKEDATA:
-               ret = 0;
-               if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data))
-                       break;
-               ret = -EIO;
-               break;
-
-       case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
-               ret = -EIO;
-               if ((addr & 3) || addr < 0 || 
-                   addr > sizeof(struct user) - 3)
-                       break;
-
-               if (addr < FRAME_SIZE*sizeof(long)) {
-                       ret = putreg(child, addr, data);
-                       break;
-               }
-               /* We need to be very careful here.  We implicitly
-                  want to modify a portion of the task_struct, and we
-                  have to be selective about what portions we allow someone
-                  to modify. */
-
-                 ret = -EIO;
-                 if(addr >= (long) &dummy->u_debugreg[0] &&
-                    addr <= (long) &dummy->u_debugreg[7]){
-
-                         if(addr == (long) &dummy->u_debugreg[4]) break;
-                         if(addr == (long) &dummy->u_debugreg[5]) break;
-                         if(addr < (long) &dummy->u_debugreg[4] &&
-                            ((unsigned long) data) >= TASK_SIZE-3) break;
-                         
-                         if(addr == (long) &dummy->u_debugreg[7]) {
-                                 data &= ~DR_CONTROL_RESERVED;
-                                 for(i=0; i<4; i++)
-                                         if ((0x5f54 >> ((data >> (16 + 4*i)) & 0xf)) & 1)
-                                                 goto out_tsk;
-                         }
-
-                         addr -= (long) &dummy->u_debugreg;
-                         addr = addr >> 2;
-                         child->thread.debugreg[addr] = data;
-                         ret = 0;
-                 }
-                 break;
-
-       case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
-       case PTRACE_CONT: { /* restart after signal. */
-               long tmp;
-
-               ret = -EIO;
-               if ((unsigned long) data > _NSIG)
-                       break;
-               if (request == PTRACE_SYSCALL)
-                       child->ptrace |= PT_TRACESYS;
-               else
-                       child->ptrace &= ~PT_TRACESYS;
-               child->exit_code = data;
-       /* make sure the single step bit is not set. */
-               tmp = get_stack_long(child, EFL_OFFSET) & ~TRAP_FLAG;
-               put_stack_long(child, EFL_OFFSET,tmp);
-               wake_up_process(child);
-               ret = 0;
-               break;
-       }
-
-/*
- * make the child exit.  Best I can do is send it a sigkill. 
- * perhaps it should be put in the status that it wants to 
- * exit.
- */
-       case PTRACE_KILL: {
-               long tmp;
-
-               ret = 0;
-               if (child->state == TASK_ZOMBIE)        /* already dead */
-                       break;
-               child->exit_code = SIGKILL;
-               /* make sure the single step bit is not set. */
-               tmp = get_stack_long(child, EFL_OFFSET) & ~TRAP_FLAG;
-               put_stack_long(child, EFL_OFFSET, tmp);
-               wake_up_process(child);
-               break;
-       }
-
-       case PTRACE_SINGLESTEP: {  /* set the trap flag. */
-               long tmp;
-
-               ret = -EIO;
-               if ((unsigned long) data > _NSIG)
-                       break;
-               child->ptrace &= ~PT_TRACESYS;
-               if ((child->ptrace & PT_DTRACE) == 0) {
-                       /* Spurious delayed TF traps may occur */
-                       child->ptrace |= PT_DTRACE;
-               }
-               tmp = get_stack_long(child, EFL_OFFSET) | TRAP_FLAG;
-               put_stack_long(child, EFL_OFFSET, tmp);
-               child->exit_code = data;
-               /* give it a chance to run. */
-               wake_up_process(child);
-               ret = 0;
-               break;
-       }
-
-       case PTRACE_DETACH:
-               /* detach a process that was attached. */
-               ret = ptrace_detach(child, data);
-               break;
-
-       case PTRACE_GETREGS: { /* Get all gp regs from the child. */
-               if (!access_ok(VERIFY_WRITE, (unsigned *)data, FRAME_SIZE*sizeof(long))) {
-                       ret = -EIO;
-                       break;
-               }
-               for ( i = 0; i < FRAME_SIZE*sizeof(long); i += sizeof(long) ) {
-                       __put_user(getreg(child, i),(unsigned long *) data);
-                       data += sizeof(long);
-               }
-               ret = 0;
-               break;
-       }
-
-       case PTRACE_SETREGS: { /* Set all gp regs in the child. */
-               unsigned long tmp;
-               if (!access_ok(VERIFY_READ, (unsigned *)data, FRAME_SIZE*sizeof(long))) {
-                       ret = -EIO;
-                       break;
-               }
-               for ( i = 0; i < FRAME_SIZE*sizeof(long); i += sizeof(long) ) {
-                       __get_user(tmp, (unsigned long *) data);
-                       putreg(child, i, tmp);
-                       data += sizeof(long);
-               }
-               ret = 0;
-               break;
-       }
-
-       case PTRACE_GETFPREGS: { /* Get the child FPU state. */
-               if (!access_ok(VERIFY_WRITE, (unsigned *)data,
-                              sizeof(struct user_i387_struct))) {
-                       ret = -EIO;
-                       break;
-               }
-               ret = 0;
-               if ( !child->used_math ) {
-                       /* Simulate an empty FPU. */
-                       set_fpu_cwd(child, 0x037f);
-                       set_fpu_swd(child, 0x0000);
-                       set_fpu_twd(child, 0xffff);
-               }
-               get_fpregs((struct user_i387_struct *)data, child);
-               break;
-       }
-
-       case PTRACE_SETFPREGS: { /* Set the child FPU state. */
-               if (!access_ok(VERIFY_READ, (unsigned *)data,
-                              sizeof(struct user_i387_struct))) {
-                       ret = -EIO;
-                       break;
-               }
-               child->used_math = 1;
-               set_fpregs(child, (struct user_i387_struct *)data);
-               ret = 0;
-               break;
-       }
-
-       case PTRACE_GETFPXREGS: { /* Get the child extended FPU state. */
-               if (!access_ok(VERIFY_WRITE, (unsigned *)data,
-                              sizeof(struct user_fxsr_struct))) {
-                       ret = -EIO;
-                       break;
-               }
-               if ( !child->used_math ) {
-                       /* Simulate an empty FPU. */
-                       set_fpu_cwd(child, 0x037f);
-                       set_fpu_swd(child, 0x0000);
-                       set_fpu_twd(child, 0xffff);
-                       set_fpu_mxcsr(child, 0x1f80);
-               }
-               ret = get_fpxregs((struct user_fxsr_struct *)data, child);
-               break;
-       }
-
-       case PTRACE_SETFPXREGS: { /* Set the child extended FPU state. */
-               if (!access_ok(VERIFY_READ, (unsigned *)data,
-                              sizeof(struct user_fxsr_struct))) {
-                       ret = -EIO;
-                       break;
-               }
-               child->used_math = 1;
-               ret = set_fpxregs(child, (struct user_fxsr_struct *)data);
-               break;
-       }
-
-       case PTRACE_SETOPTIONS: {
-               if (data & PTRACE_O_TRACESYSGOOD)
-                       child->ptrace |= PT_TRACESYSGOOD;
-               else
-                       child->ptrace &= ~PT_TRACESYSGOOD;
-               ret = 0;
-               break;
-       }
-
-       default:
-               ret = -EIO;
-               break;
-       }
-out_tsk:
-       free_task_struct(child);
-out:
-       unlock_kernel();
-       return ret;
-}
-
-asmlinkage void syscall_trace(void)
-{
-       if ((current->ptrace & (PT_PTRACED|PT_TRACESYS)) !=
-                       (PT_PTRACED|PT_TRACESYS))
-               return;
-       /* the 0x80 provides a way for the tracing parent to distinguish
-          between a syscall stop and SIGTRAP delivery */
-       current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-                                       ? 0x80 : 0);
-       current->state = TASK_STOPPED;
-       notify_parent(current, SIGCHLD);
-       schedule();
-       /*
-        * this isn't the same as continuing with a signal, but it will do
-        * for normal use.  strace only continues with a signal if the
-        * stopping signal is not SIGTRAP.  -brl
-        */
-       if (current->exit_code) {
-               send_sig(current->exit_code, current, 1);
-               current->exit_code = 0;
-       }
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/semaphore.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/semaphore.c
deleted file mode 100644 (file)
index 08ff686..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * i386 semaphore implementation.
- *
- * (C) Copyright 1999 Linus Torvalds
- *
- * Portions Copyright 1999 Red Hat, Inc.
- *
- *     This program is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License
- *     as published by the Free Software Foundation; either version
- *     2 of the License, or (at your option) any later version.
- *
- * rw semaphores implemented November 1999 by Benjamin LaHaise <bcrl@redhat.com>
- */
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <asm/semaphore.h>
-
-/*
- * Semaphores are implemented using a two-way counter:
- * The "count" variable is decremented for each process
- * that tries to acquire the semaphore, while the "sleeping"
- * variable is a count of such acquires.
- *
- * Notably, the inline "up()" and "down()" functions can
- * efficiently test if they need to do any extra work (up
- * needs to do something only if count was negative before
- * the increment operation.
- *
- * "sleeping" and the contention routine ordering is
- * protected by the semaphore spinlock.
- *
- * Note that these functions are only called when there is
- * contention on the lock, and as such all this is the
- * "non-critical" part of the whole semaphore business. The
- * critical part is the inline stuff in <asm/semaphore.h>
- * where we want to avoid any extra jumps and calls.
- */
-
-/*
- * Logic:
- *  - only on a boundary condition do we need to care. When we go
- *    from a negative count to a non-negative, we wake people up.
- *  - when we go from a non-negative count to a negative do we
- *    (a) synchronize with the "sleeper" count and (b) make sure
- *    that we're on the wakeup list before we synchronize so that
- *    we cannot lose wakeup events.
- */
-
-void __up(struct semaphore *sem)
-{
-       wake_up(&sem->wait);
-}
-
-static spinlock_t semaphore_lock = SPIN_LOCK_UNLOCKED;
-
-void __down(struct semaphore * sem)
-{
-       struct task_struct *tsk = current;
-       DECLARE_WAITQUEUE(wait, tsk);
-       tsk->state = TASK_UNINTERRUPTIBLE;
-       add_wait_queue_exclusive(&sem->wait, &wait);
-
-       spin_lock_irq(&semaphore_lock);
-       sem->sleepers++;
-       for (;;) {
-               int sleepers = sem->sleepers;
-
-               /*
-                * Add "everybody else" into it. They aren't
-                * playing, because we own the spinlock.
-                */
-               if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-                       sem->sleepers = 0;
-                       break;
-               }
-               sem->sleepers = 1;      /* us - see -1 above */
-               spin_unlock_irq(&semaphore_lock);
-
-               schedule();
-               tsk->state = TASK_UNINTERRUPTIBLE;
-               spin_lock_irq(&semaphore_lock);
-       }
-       spin_unlock_irq(&semaphore_lock);
-       remove_wait_queue(&sem->wait, &wait);
-       tsk->state = TASK_RUNNING;
-       wake_up(&sem->wait);
-}
-
-int __down_interruptible(struct semaphore * sem)
-{
-       int retval = 0;
-       struct task_struct *tsk = current;
-       DECLARE_WAITQUEUE(wait, tsk);
-       tsk->state = TASK_INTERRUPTIBLE;
-       add_wait_queue_exclusive(&sem->wait, &wait);
-
-       spin_lock_irq(&semaphore_lock);
-       sem->sleepers ++;
-       for (;;) {
-               int sleepers = sem->sleepers;
-
-               /*
-                * With signals pending, this turns into
-                * the trylock failure case - we won't be
-                * sleeping, and we* can't get the lock as
-                * it has contention. Just correct the count
-                * and exit.
-                */
-               if (signal_pending(current)) {
-                       retval = -EINTR;
-                       sem->sleepers = 0;
-                       atomic_add(sleepers, &sem->count);
-                       break;
-               }
-
-               /*
-                * Add "everybody else" into it. They aren't
-                * playing, because we own the spinlock. The
-                * "-1" is because we're still hoping to get
-                * the lock.
-                */
-               if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-                       sem->sleepers = 0;
-                       break;
-               }
-               sem->sleepers = 1;      /* us - see -1 above */
-               spin_unlock_irq(&semaphore_lock);
-
-               schedule();
-               tsk->state = TASK_INTERRUPTIBLE;
-               spin_lock_irq(&semaphore_lock);
-       }
-       spin_unlock_irq(&semaphore_lock);
-       tsk->state = TASK_RUNNING;
-       remove_wait_queue(&sem->wait, &wait);
-       wake_up(&sem->wait);
-       return retval;
-}
-
-/*
- * Trylock failed - make sure we correct for
- * having decremented the count.
- *
- * We could have done the trylock with a
- * single "cmpxchg" without failure cases,
- * but then it wouldn't work on a 386.
- */
-int __down_trylock(struct semaphore * sem)
-{
-       int sleepers;
-       unsigned long flags;
-
-       spin_lock_irqsave(&semaphore_lock, flags);
-       sleepers = sem->sleepers + 1;
-       sem->sleepers = 0;
-
-       /*
-        * Add "everybody else" and us into it. They aren't
-        * playing, because we own the spinlock.
-        */
-       if (!atomic_add_negative(sleepers, &sem->count))
-               wake_up(&sem->wait);
-
-       spin_unlock_irqrestore(&semaphore_lock, flags);
-       return 1;
-}
-
-
-/*
- * The semaphore operations have a special calling sequence that
- * allow us to do a simpler in-line version of them. These routines
- * need to convert that sequence back into the C sequence when
- * there is contention on the semaphore.
- *
- * %ecx contains the semaphore pointer on entry. Save the C-clobbered
- * registers (%eax, %edx and %ecx) except %eax when used as a return
- * value..
- */
-asm(
-".text\n"
-".align 4\n"
-".globl __down_failed\n"
-"__down_failed:\n\t"
-#if defined(CONFIG_FRAME_POINTER)
-       "pushl %ebp\n\t"
-       "movl  %esp,%ebp\n\t"
-#endif
-       "pushl %eax\n\t"
-       "pushl %edx\n\t"
-       "pushl %ecx\n\t"
-       "call __down\n\t"
-       "popl %ecx\n\t"
-       "popl %edx\n\t"
-       "popl %eax\n\t"
-#if defined(CONFIG_FRAME_POINTER)
-       "movl %ebp,%esp\n\t"
-       "popl %ebp\n\t"
-#endif
-       "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __down_failed_interruptible\n"
-"__down_failed_interruptible:\n\t"
-#if defined(CONFIG_FRAME_POINTER)
-       "pushl %ebp\n\t"
-       "movl  %esp,%ebp\n\t"
-#endif
-       "pushl %edx\n\t"
-       "pushl %ecx\n\t"
-       "call __down_interruptible\n\t"
-       "popl %ecx\n\t"
-       "popl %edx\n\t"
-#if defined(CONFIG_FRAME_POINTER)
-       "movl %ebp,%esp\n\t"
-       "popl %ebp\n\t"
-#endif
-       "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __down_failed_trylock\n"
-"__down_failed_trylock:\n\t"
-#if defined(CONFIG_FRAME_POINTER)
-       "pushl %ebp\n\t"
-       "movl  %esp,%ebp\n\t"
-#endif
-       "pushl %edx\n\t"
-       "pushl %ecx\n\t"
-       "call __down_trylock\n\t"
-       "popl %ecx\n\t"
-       "popl %edx\n\t"
-#if defined(CONFIG_FRAME_POINTER)
-       "movl %ebp,%esp\n\t"
-       "popl %ebp\n\t"
-#endif
-       "ret"
-);
-
-asm(
-".text\n"
-".align 4\n"
-".globl __up_wakeup\n"
-"__up_wakeup:\n\t"
-       "pushl %eax\n\t"
-       "pushl %edx\n\t"
-       "pushl %ecx\n\t"
-       "call __up\n\t"
-       "popl %ecx\n\t"
-       "popl %edx\n\t"
-       "popl %eax\n\t"
-       "ret"
-);
-
-/*
- * rw spinlock fallbacks
- */
-#if defined(CONFIG_SMP)
-asm(
-"
-.align 4
-.globl __write_lock_failed
-__write_lock_failed:
-       " LOCK "addl    $" RW_LOCK_BIAS_STR ",(%eax)
-1:     rep; nop
-       cmpl    $" RW_LOCK_BIAS_STR ",(%eax)
-       jne     1b
-
-       " LOCK "subl    $" RW_LOCK_BIAS_STR ",(%eax)
-       jnz     __write_lock_failed
-       ret
-
-
-.align 4
-.globl __read_lock_failed
-__read_lock_failed:
-       lock ; incl     (%eax)
-1:     rep; nop
-       cmpl    $1,(%eax)
-       js      1b
-
-       lock ; decl     (%eax)
-       js      __read_lock_failed
-       ret
-"
-);
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/setup.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/setup.c
deleted file mode 100644 (file)
index 979deac..0000000
+++ /dev/null
@@ -1,996 +0,0 @@
-/*
- *  linux/arch/i386/kernel/setup.c
- *
- *  Copyright (C) 1995  Linus Torvalds
- */
-
-/*
- * This file handles the architecture-dependent parts of initialization
- */
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/stddef.h>
-#include <linux/unistd.h>
-#include <linux/ptrace.h>
-#include <linux/slab.h>
-#include <linux/user.h>
-#include <linux/a.out.h>
-#include <linux/tty.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
-#include <linux/config.h>
-#include <linux/init.h>
-#include <linux/apm_bios.h>
-#ifdef CONFIG_BLK_DEV_RAM
-#include <linux/blk.h>
-#endif
-#include <linux/highmem.h>
-#include <linux/bootmem.h>
-#include <linux/seq_file.h>
-#include <asm/processor.h>
-#include <linux/console.h>
-#include <asm/mtrr.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/smp.h>
-#include <asm/msr.h>
-#include <asm/desc.h>
-#include <asm/dma.h>
-#include <asm/mpspec.h>
-#include <asm/mmu_context.h>
-#include <asm/hypervisor.h>
-
-shared_info_t *HYPERVISOR_shared_info;
-
-unsigned long *phys_to_machine_mapping;
-
-/*
- * Machine setup..
- */
-
-char ignore_irq13;             /* set if exception 16 works */
-struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
-
-unsigned long mmu_cr4_features;
-
-/*
- * Bus types ..
- */
-#ifdef CONFIG_EISA
-int EISA_bus;
-#endif
-int MCA_bus;
-
-/* for MCA, but anyone else can use it if they want */
-unsigned int machine_id;
-unsigned int machine_submodel_id;
-unsigned int BIOS_revision;
-unsigned int mca_pentium_flag;
-
-/* For PCI or other memory-mapped resources */
-unsigned long pci_mem_start = 0x10000000;
-
-/*
- * Setup options
- */
-struct drive_info_struct { char dummy[32]; } drive_info;
-struct screen_info screen_info;
-struct apm_info apm_info;
-struct sys_desc_table_struct {
-    unsigned short length;
-    unsigned char table[0];
-};
-
-unsigned char aux_device_present;
-
-extern int root_mountflags;
-extern char _text, _etext, _edata, _end;
-
-int enable_acpi_smp_table;
-
-/* Raw start-of-day parameters from the hypervisor. */
-union start_info_union start_info_union;
-
-#define COMMAND_LINE_SIZE 256
-static char command_line[COMMAND_LINE_SIZE];
-char saved_command_line[COMMAND_LINE_SIZE];
-
-static void __init parse_mem_cmdline (char ** cmdline_p)
-{
-    char c = ' ', *to = command_line, *from = saved_command_line;
-    int len = 0;
-
-    /* Save unparsed command line copy for /proc/cmdline */
-    memcpy(saved_command_line, start_info.cmd_line, COMMAND_LINE_SIZE);
-    saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
-
-    for (;;) {
-        /*
-         * "mem=nopentium" disables the 4MB page tables.
-         * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
-         * to <mem>, overriding the bios size.
-         * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from
-         * <start> to <start>+<mem>, overriding the bios size.
-         */
-        if (c == ' ' && !memcmp(from, "mem=", 4)) {
-            if (to != command_line)
-                to--;
-            if (!memcmp(from+4, "nopentium", 9)) {
-                from += 9+4;
-            } else if (!memcmp(from+4, "exactmap", 8)) {
-                from += 8+4;
-            } else {
-                (void)memparse(from+4, &from);
-                if (*from == '@')
-                    (void)memparse(from+1, &from);
-            }
-        }
-
-        c = *(from++);
-        if (!c)
-            break;
-        if (COMMAND_LINE_SIZE <= ++len)
-            break;
-        *(to++) = c;
-    }
-    *to = '\0';
-    *cmdline_p = command_line;
-}
-
-void __init setup_arch(char **cmdline_p)
-{
-    unsigned long start_pfn, max_pfn, max_low_pfn;
-    unsigned long bootmap_size;
-    unsigned long i;
-
-    extern void hypervisor_callback(void);
-    extern void failsafe_callback(void);
-
-    extern unsigned long cpu0_pte_quicklist[];
-    extern unsigned long cpu0_pgd_quicklist[];
-
-    HYPERVISOR_shared_info->event_address    = 
-        (unsigned long)hypervisor_callback;
-    HYPERVISOR_shared_info->failsafe_address =
-        (unsigned long)failsafe_callback;
-
-    boot_cpu_data.pgd_quick = cpu0_pgd_quicklist;
-    boot_cpu_data.pte_quick = cpu0_pte_quicklist;
-
-    ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
-    memset(&drive_info, 0, sizeof(drive_info));
-    memset(&screen_info, 0, sizeof(screen_info));
-    memset(&apm_info.bios, 0, sizeof(apm_info.bios));
-    aux_device_present = 0;
-
-#ifdef CONFIG_BLK_DEV_RAM
-    rd_image_start = 0;
-    rd_prompt = 0;
-    rd_doload = 0;
-#endif
-
-    root_mountflags &= ~MS_RDONLY;
-    init_mm.start_code = (unsigned long) &_text;
-    init_mm.end_code = (unsigned long) &_etext;
-    init_mm.end_data = (unsigned long) &_edata;
-    init_mm.brk = (unsigned long) &_end;
-
-    parse_mem_cmdline(cmdline_p);
-
-#define PFN_UP(x)      (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-#define PFN_DOWN(x)    ((x) >> PAGE_SHIFT)
-#define PFN_PHYS(x)    ((x) << PAGE_SHIFT)
-
-/*
- * 128MB for vmalloc and initrd
- */
-#define VMALLOC_RESERVE        (unsigned long)(128 << 20)
-#define MAXMEM         (unsigned long)(HYPERVISOR_VIRT_START-PAGE_OFFSET-VMALLOC_RESERVE)
-#define MAXMEM_PFN     PFN_DOWN(MAXMEM)
-#define MAX_NONPAE_PFN (1 << 20)
-
-    /*
-     * partially used pages are not usable - thus
-     * we are rounding upwards:
-     */
-#ifdef CONFIG_BLK_DEV_INITRD
-    if ( start_info.mod_start )
-        start_pfn = PFN_UP(__pa(start_info.mod_start + start_info.mod_len));
-    else
-#endif
-    start_pfn = PFN_UP(__pa(&_end));
-    max_pfn = start_info.nr_pages;
-
-    /*
-     * Determine low and high memory ranges:
-     */
-    max_low_pfn = max_pfn;
-    if (max_low_pfn > MAXMEM_PFN) {
-        max_low_pfn = MAXMEM_PFN;
-#ifndef CONFIG_HIGHMEM
-        /* Maximum memory usable is what is directly addressable */
-        printk(KERN_WARNING "Warning only %ldMB will be used.\n",
-               MAXMEM>>20);
-        if (max_pfn > MAX_NONPAE_PFN)
-            printk(KERN_WARNING "Use a PAE enabled kernel.\n");
-        else
-            printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
-#else /* !CONFIG_HIGHMEM */
-#ifndef CONFIG_X86_PAE
-        if (max_pfn > MAX_NONPAE_PFN) {
-            max_pfn = MAX_NONPAE_PFN;
-            printk(KERN_WARNING "Warning only 4GB will be used.\n");
-            printk(KERN_WARNING "Use a PAE enabled kernel.\n");
-        }
-#endif /* !CONFIG_X86_PAE */
-#endif /* !CONFIG_HIGHMEM */
-    }
-
-#ifdef CONFIG_HIGHMEM
-    highstart_pfn = highend_pfn = max_pfn;
-    if (max_pfn > MAXMEM_PFN) {
-        highstart_pfn = MAXMEM_PFN;
-        printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
-               pages_to_mb(highend_pfn - highstart_pfn));
-    }
-#endif
-
-    /*
-     * Initialize the boot-time allocator, and free up all RAM.
-     * Then reserve space for OS image, and the bootmem bitmap.
-     */
-    bootmap_size = init_bootmem(start_pfn, max_low_pfn);
-    free_bootmem(0, PFN_PHYS(max_low_pfn));
-    reserve_bootmem(0, PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1);
-
-    /* Now reserve space for the hypervisor-provided page tables. */
-    {
-        unsigned long *pgd = (unsigned long *)start_info.pt_base;
-        unsigned long  pte;
-        int i;
-        reserve_bootmem(__pa(pgd), PAGE_SIZE);
-        for ( i = 0; i < (HYPERVISOR_VIRT_START>>22); i++ )
-        {
-            unsigned long pgde = *pgd++;
-            if ( !(pgde & 1) ) continue;
-            pte = machine_to_phys(pgde & PAGE_MASK);
-            reserve_bootmem(pte, PAGE_SIZE);
-        }
-    }
-    cur_pgd = init_mm.pgd = (pgd_t *)start_info.pt_base;
-
-    /* Now initialise the physical->machine mapping table. */
-    phys_to_machine_mapping = alloc_bootmem(max_pfn * sizeof(unsigned long));
-    for ( i = 0; i < max_pfn; i++ )
-    {
-        unsigned long pgde, *ppte;
-        unsigned long pfn = i + (PAGE_OFFSET >> PAGE_SHIFT);
-        pgde = *((unsigned long *)start_info.pt_base + (pfn >> 10));
-        ppte = (unsigned long *)machine_to_phys(pgde & PAGE_MASK) + (pfn&1023);
-        phys_to_machine_mapping[i] = 
-            (*(unsigned long *)__va(ppte)) >> PAGE_SHIFT;
-    }
-
-#ifdef CONFIG_BLK_DEV_INITRD
-    if (start_info.mod_start) {
-        if ((__pa(start_info.mod_start) + start_info.mod_len) <= 
-            (max_low_pfn << PAGE_SHIFT)) {
-            initrd_start = start_info.mod_start;
-            initrd_end   = initrd_start + start_info.mod_len;
-            initrd_below_start_ok = 1;
-        }
-        else {
-            printk(KERN_ERR "initrd extends beyond end of memory "
-                   "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
-                   __pa(start_info.mod_start) + start_info.mod_len,
-                   max_low_pfn << PAGE_SHIFT);
-            initrd_start = 0;
-        }
-    }
-#endif
-
-    paging_init();
-}
-
-static int cachesize_override __initdata = -1;
-static int __init cachesize_setup(char *str)
-{
-    get_option (&str, &cachesize_override);
-    return 1;
-}
-__setup("cachesize=", cachesize_setup);
-
-
-static int __init get_model_name(struct cpuinfo_x86 *c)
-{
-    unsigned int *v;
-    char *p, *q;
-
-    if (cpuid_eax(0x80000000) < 0x80000004)
-        return 0;
-
-    v = (unsigned int *) c->x86_model_id;
-    cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
-    cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
-    cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
-    c->x86_model_id[48] = 0;
-
-    /* Intel chips right-justify this string for some dumb reason;
-       undo that brain damage */
-    p = q = &c->x86_model_id[0];
-    while ( *p == ' ' )
-        p++;
-    if ( p != q ) {
-        while ( *p )
-            *q++ = *p++;
-        while ( q <= &c->x86_model_id[48] )
-            *q++ = '\0';       /* Zero-pad the rest */
-    }
-
-    return 1;
-}
-
-
-static void __init display_cacheinfo(struct cpuinfo_x86 *c)
-{
-    unsigned int n, dummy, ecx, edx, l2size;
-
-    n = cpuid_eax(0x80000000);
-
-    if (n >= 0x80000005) {
-        cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
-        printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
-               edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
-        c->x86_cache_size=(ecx>>24)+(edx>>24); 
-    }
-
-    if (n < 0x80000006)        /* Some chips just has a large L1. */
-        return;
-
-    ecx = cpuid_ecx(0x80000006);
-    l2size = ecx >> 16;
-
-    /* AMD errata T13 (order #21922) */
-    if ((c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 6)) {
-        if (c->x86_model == 3 && c->x86_mask == 0)     /* Duron Rev A0 */
-            l2size = 64;
-        if (c->x86_model == 4 &&
-            (c->x86_mask==0 || c->x86_mask==1))        /* Tbird rev A1/A2 */
-            l2size = 256;
-    }
-
-    /* Intel PIII Tualatin. This comes in two flavours.
-     * One has 256kb of cache, the other 512. We have no way
-     * to determine which, so we use a boottime override
-     * for the 512kb model, and assume 256 otherwise.
-     */
-    if ((c->x86_vendor == X86_VENDOR_INTEL) && (c->x86 == 6) &&
-        (c->x86_model == 11) && (l2size == 0))
-        l2size = 256;
-
-    /* VIA C3 CPUs (670-68F) need further shifting. */
-    if (c->x86_vendor == X86_VENDOR_CENTAUR && (c->x86 == 6) &&
-        ((c->x86_model == 7) || (c->x86_model == 8))) {
-        l2size = l2size >> 8;
-    }
-
-    /* Allow user to override all this if necessary. */
-    if (cachesize_override != -1)
-        l2size = cachesize_override;
-
-    if ( l2size == 0 )
-        return;                /* Again, no L2 cache is possible */
-
-    c->x86_cache_size = l2size;
-
-    printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
-           l2size, ecx & 0xFF);
-}
-
-
-static int __init init_amd(struct cpuinfo_x86 *c)
-{
-    int r;
-
-    /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
-       3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
-    clear_bit(0*32+31, &c->x86_capability);
-       
-    r = get_model_name(c);
-
-    switch(c->x86)
-    {
-    case 6:    /* An Athlon/Duron. We can trust the BIOS probably */
-        break;         
-    default:
-        panic("Unsupported AMD processor\n");
-    }
-
-    display_cacheinfo(c);
-    return r;
-}
-
-
-static void __init init_intel(struct cpuinfo_x86 *c)
-{
-    char *p = NULL;
-    unsigned int l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
-
-    if (c->cpuid_level > 1) {
-        /* supports eax=2  call */
-        int i, j, n;
-        int regs[4];
-        unsigned char *dp = (unsigned char *)regs;
-
-        /* Number of times to iterate */
-        n = cpuid_eax(2) & 0xFF;
-
-        for ( i = 0 ; i < n ; i++ ) {
-            cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
-                       
-            /* If bit 31 is set, this is an unknown format */
-            for ( j = 0 ; j < 3 ; j++ ) {
-                if ( regs[j] < 0 ) regs[j] = 0;
-            }
-
-            /* Byte 0 is level count, not a descriptor */
-            for ( j = 1 ; j < 16 ; j++ ) {
-                unsigned char des = dp[j];
-                unsigned char dl, dh;
-                unsigned int cs;
-
-                dh = des >> 4;
-                dl = des & 0x0F;
-
-                               /* Black magic... */
-
-                switch ( dh )
-                {
-                case 0:
-                    switch ( dl ) {
-                    case 6:
-                        /* L1 I cache */
-                        l1i += 8;
-                        break;
-                    case 8:
-                        /* L1 I cache */
-                        l1i += 16;
-                        break;
-                    case 10:
-                        /* L1 D cache */
-                        l1d += 8;
-                        break;
-                    case 12:
-                        /* L1 D cache */
-                        l1d += 16;
-                        break;
-                    default:;
-                        /* TLB, or unknown */
-                    }
-                    break;
-                case 2:
-                    if ( dl ) {
-                        /* L3 cache */
-                        cs = (dl-1) << 9;
-                        l3 += cs;
-                    }
-                    break;
-                case 4:
-                    if ( c->x86 > 6 && dl ) {
-                        /* P4 family */
-                        /* L3 cache */
-                        cs = 128 << (dl-1);
-                        l3 += cs;
-                        break;
-                    }
-                    /* else same as 8 - fall through */
-                case 8:
-                    if ( dl ) {
-                        /* L2 cache */
-                        cs = 128 << (dl-1);
-                        l2 += cs;
-                    }
-                    break;
-                case 6:
-                    if (dl > 5) {
-                        /* L1 D cache */
-                        cs = 8<<(dl-6);
-                        l1d += cs;
-                    }
-                    break;
-                case 7:
-                    if ( dl >= 8 ) 
-                    {
-                        /* L2 cache */
-                        cs = 64<<(dl-8);
-                        l2 += cs;
-                    } else {
-                        /* L0 I cache, count as L1 */
-                        cs = dl ? (16 << (dl-1)) : 12;
-                        l1i += cs;
-                    }
-                    break;
-                default:
-                    /* TLB, or something else we don't know about */
-                    break;
-                }
-            }
-        }
-        if ( l1i || l1d )
-            printk(KERN_INFO "CPU: L1 I cache: %dK, L1 D cache: %dK\n",
-                   l1i, l1d);
-        if ( l2 )
-            printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
-        if ( l3 )
-            printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
-
-        /*
-         * This assumes the L3 cache is shared; it typically lives in
-         * the northbridge.  The L1 caches are included by the L2
-         * cache, and so should not be included for the purpose of
-         * SMP switching weights.
-         */
-        c->x86_cache_size = l2 ? l2 : (l1i+l1d);
-    }
-
-    /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it */
-    if ( c->x86 == 6 && c->x86_model < 3 && c->x86_mask < 3 )
-        clear_bit(X86_FEATURE_SEP, &c->x86_capability);
-       
-    /* Names for the Pentium II/Celeron processors 
-       detectable only by also checking the cache size.
-       Dixon is NOT a Celeron. */
-    if (c->x86 == 6) {
-        switch (c->x86_model) {
-        case 5:
-            if (l2 == 0)
-                p = "Celeron (Covington)";
-            if (l2 == 256)
-                p = "Mobile Pentium II (Dixon)";
-            break;
-                       
-        case 6:
-            if (l2 == 128)
-                p = "Celeron (Mendocino)";
-            break;
-                       
-        case 8:
-            if (l2 == 128)
-                p = "Celeron (Coppermine)";
-            break;
-        }
-    }
-
-    if ( p )
-        strcpy(c->x86_model_id, p);
-}
-
-void __init get_cpu_vendor(struct cpuinfo_x86 *c)
-{
-    char *v = c->x86_vendor_id;
-
-    if (!strcmp(v, "GenuineIntel"))
-        c->x86_vendor = X86_VENDOR_INTEL;
-    else if (!strcmp(v, "AuthenticAMD"))
-        c->x86_vendor = X86_VENDOR_AMD;
-    else
-        c->x86_vendor = X86_VENDOR_UNKNOWN;
-}
-
-struct cpu_model_info {
-    int vendor;
-    int family;
-    char *model_names[16];
-};
-
-/* Naming convention should be: <Name> [(<Codename>)] */
-/* This table only is used unless init_<vendor>() below doesn't set it; */
-/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
-static struct cpu_model_info cpu_models[] __initdata = {
-    { X86_VENDOR_INTEL,        6,
-      { "Pentium Pro A-step", "Pentium Pro", NULL, "Pentium II (Klamath)", 
-        NULL, "Pentium II (Deschutes)", "Mobile Pentium II",
-        "Pentium III (Katmai)", "Pentium III (Coppermine)", NULL,
-        "Pentium III (Cascades)", NULL, NULL, NULL, NULL }},
-    { X86_VENDOR_AMD,  6, /* Is this this really necessary?? */
-      { "Athlon", "Athlon",
-        "Athlon", NULL, "Athlon", NULL,
-        NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL }}
-};
-
-/* Look up CPU names by table lookup. */
-static char __init *table_lookup_model(struct cpuinfo_x86 *c)
-{
-    struct cpu_model_info *info = cpu_models;
-    int i;
-
-    if ( c->x86_model >= 16 )
-        return NULL;   /* Range check */
-
-    for ( i = 0 ; i < sizeof(cpu_models)/sizeof(struct cpu_model_info) ; i++ ) {
-        if ( info->vendor == c->x86_vendor &&
-             info->family == c->x86 ) {
-            return info->model_names[c->x86_model];
-        }
-        info++;
-    }
-    return NULL;               /* Not found */
-}
-
-
-
-/* Standard macro to see if a specific flag is changeable */
-static inline int flag_is_changeable_p(u32 flag)
-{
-    u32 f1, f2;
-
-    asm("pushfl\n\t"
-        "pushfl\n\t"
-        "popl %0\n\t"
-        "movl %0,%1\n\t"
-        "xorl %2,%0\n\t"
-        "pushl %0\n\t"
-        "popfl\n\t"
-        "pushfl\n\t"
-        "popl %0\n\t"
-        "popfl\n\t"
-        : "=&r" (f1), "=&r" (f2)
-        : "ir" (flag));
-
-    return ((f1^f2) & flag) != 0;
-}
-
-
-/* Probe for the CPUID instruction */
-static int __init have_cpuid_p(void)
-{
-    return flag_is_changeable_p(X86_EFLAGS_ID);
-}
-
-
-
-/*
- * This does the hard work of actually picking apart the CPU stuff...
- */
-void __init identify_cpu(struct cpuinfo_x86 *c)
-{
-    int junk, i;
-    u32 xlvl, tfms;
-
-    c->loops_per_jiffy = loops_per_jiffy;
-    c->x86_cache_size = -1;
-    c->x86_vendor = X86_VENDOR_UNKNOWN;
-    c->cpuid_level = -1;       /* CPUID not detected */
-    c->x86_model = c->x86_mask = 0;    /* So far unknown... */
-    c->x86_vendor_id[0] = '\0'; /* Unset */
-    c->x86_model_id[0] = '\0';  /* Unset */
-    memset(&c->x86_capability, 0, sizeof c->x86_capability);
-    c->hard_math = 1;
-
-    if ( !have_cpuid_p() ) {
-        panic("Processor must support CPUID\n");
-    } else {
-        /* CPU does have CPUID */
-
-        /* Get vendor name */
-        cpuid(0x00000000, &c->cpuid_level,
-              (int *)&c->x86_vendor_id[0],
-              (int *)&c->x86_vendor_id[8],
-              (int *)&c->x86_vendor_id[4]);
-               
-        get_cpu_vendor(c);
-        /* Initialize the standard set of capabilities */
-        /* Note that the vendor-specific code below might override */
-
-        /* Intel-defined flags: level 0x00000001 */
-        if ( c->cpuid_level >= 0x00000001 ) {
-            cpuid(0x00000001, &tfms, &junk, &junk,
-                  &c->x86_capability[0]);
-            c->x86 = (tfms >> 8) & 15;
-            c->x86_model = (tfms >> 4) & 15;
-            c->x86_mask = tfms & 15;
-        } else {
-            /* Have CPUID level 0 only - unheard of */
-            c->x86 = 4;
-        }
-
-        /* AMD-defined flags: level 0x80000001 */
-        xlvl = cpuid_eax(0x80000000);
-        if ( (xlvl & 0xffff0000) == 0x80000000 ) {
-            if ( xlvl >= 0x80000001 )
-                c->x86_capability[1] = cpuid_edx(0x80000001);
-            if ( xlvl >= 0x80000004 )
-                get_model_name(c); /* Default name */
-        }
-
-        /* Transmeta-defined flags: level 0x80860001 */
-        xlvl = cpuid_eax(0x80860000);
-        if ( (xlvl & 0xffff0000) == 0x80860000 ) {
-            if (  xlvl >= 0x80860001 )
-                c->x86_capability[2] = cpuid_edx(0x80860001);
-        }
-    }
-
-    printk(KERN_DEBUG "CPU: Before vendor init, caps: %08x %08x %08x, vendor = %d\n",
-           c->x86_capability[0],
-           c->x86_capability[1],
-           c->x86_capability[2],
-           c->x86_vendor);
-
-    /*
-     * Vendor-specific initialization.  In this section we
-     * canonicalize the feature flags, meaning if there are
-     * features a certain CPU supports which CPUID doesn't
-     * tell us, CPUID claiming incorrect flags, or other bugs,
-     * we handle them here.
-     *
-     * At the end of this section, c->x86_capability better
-     * indicate the features this CPU genuinely supports!
-     */
-    switch ( c->x86_vendor ) {
-    case X86_VENDOR_AMD:
-        init_amd(c);
-        break;
-
-    case X86_VENDOR_INTEL:
-        init_intel(c);
-        break;
-
-    default:
-        panic("Unsupported CPU vendor\n");
-    }
-       
-    printk(KERN_DEBUG "CPU: After vendor init, caps: %08x %08x %08x %08x\n",
-           c->x86_capability[0],
-           c->x86_capability[1],
-           c->x86_capability[2],
-           c->x86_capability[3]);
-
-
-    /* If the model name is still unset, do table lookup. */
-    if ( !c->x86_model_id[0] ) {
-        char *p;
-        p = table_lookup_model(c);
-        if ( p )
-            strcpy(c->x86_model_id, p);
-        else
-            /* Last resort... */
-            sprintf(c->x86_model_id, "%02x/%02x",
-                    c->x86_vendor, c->x86_model);
-    }
-
-    /* Now the feature flags better reflect actual CPU features! */
-
-    printk(KERN_DEBUG "CPU:     After generic, caps: %08x %08x %08x %08x\n",
-           c->x86_capability[0],
-           c->x86_capability[1],
-           c->x86_capability[2],
-           c->x86_capability[3]);
-
-    /*
-     * On SMP, boot_cpu_data holds the common feature set between
-     * all CPUs; so make sure that we indicate which features are
-     * common between the CPUs.  The first time this routine gets
-     * executed, c == &boot_cpu_data.
-     */
-    if ( c != &boot_cpu_data ) {
-        /* AND the already accumulated flags with these */
-        for ( i = 0 ; i < NCAPINTS ; i++ )
-            boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
-    }
-
-    printk(KERN_DEBUG "CPU:             Common caps: %08x %08x %08x %08x\n",
-           boot_cpu_data.x86_capability[0],
-           boot_cpu_data.x86_capability[1],
-           boot_cpu_data.x86_capability[2],
-           boot_cpu_data.x86_capability[3]);
-}
-
-
-/* These need to match <asm/processor.h> */
-static char *cpu_vendor_names[] __initdata = {
-    "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" };
-
-
-void __init print_cpu_info(struct cpuinfo_x86 *c)
-{
-    char *vendor = NULL;
-
-    if (c->x86_vendor < sizeof(cpu_vendor_names)/sizeof(char *))
-        vendor = cpu_vendor_names[c->x86_vendor];
-    else if (c->cpuid_level >= 0)
-        vendor = c->x86_vendor_id;
-
-    if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor)))
-        printk("%s ", vendor);
-
-    if (!c->x86_model_id[0])
-        printk("%d86", c->x86);
-    else
-        printk("%s", c->x86_model_id);
-
-    if (c->x86_mask || c->cpuid_level >= 0) 
-        printk(" stepping %02x\n", c->x86_mask);
-    else
-        printk("\n");
-}
-
-/*
- *     Get CPU information for use by the procfs.
- */
-static int show_cpuinfo(struct seq_file *m, void *v)
-{
-    /* 
-     * These flag bits must match the definitions in <asm/cpufeature.h>.
-     * NULL means this bit is undefined or reserved; either way it doesn't
-     * have meaning as far as Linux is concerned.  Note that it's important
-     * to realize there is a difference between this table and CPUID -- if
-     * applications want to get the raw CPUID data, they should access
-     * /dev/cpu/<cpu_nr>/cpuid instead.
-        */
-    static char *x86_cap_flags[] = {
-        /* Intel-defined */
-        "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
-        "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
-        "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
-        "fxsr", "sse", "sse2", "ss", NULL, "tm", "ia64", NULL,
-
-        /* AMD-defined */
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, "mmxext", NULL,
-        NULL, NULL, NULL, NULL, NULL, "lm", "3dnowext", "3dnow",
-
-        /* Transmeta-defined */
-        "recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
-        /* Other (Linux-defined) */
-        "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    };
-    struct cpuinfo_x86 *c = v;
-    int i, n = c - cpu_data;
-    int fpu_exception;
-
-#ifdef CONFIG_SMP
-    if (!(cpu_online_map & (1<<n)))
-        return 0;
-#endif
-    seq_printf(m, "processor\t: %d\n"
-               "vendor_id\t: %s\n"
-               "cpu family\t: %d\n"
-               "model\t\t: %d\n"
-               "model name\t: %s\n",
-               n,
-               c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
-               c->x86,
-               c->x86_model,
-               c->x86_model_id[0] ? c->x86_model_id : "unknown");
-
-    if (c->x86_mask || c->cpuid_level >= 0)
-        seq_printf(m, "stepping\t: %d\n", c->x86_mask);
-    else
-        seq_printf(m, "stepping\t: unknown\n");
-
-    if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) {
-        seq_printf(m, "cpu MHz\t\t: %lu.%03lu\n",
-                   cpu_khz / 1000, (cpu_khz % 1000));
-    }
-
-    /* Cache size */
-    if (c->x86_cache_size >= 0)
-        seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
-       
-       /* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */
-    fpu_exception = c->hard_math && (ignore_irq13 || cpu_has_fpu);
-    seq_printf(m, "fdiv_bug\t: %s\n"
-               "hlt_bug\t\t: %s\n"
-               "f00f_bug\t: %s\n"
-               "coma_bug\t: %s\n"
-               "fpu\t\t: %s\n"
-               "fpu_exception\t: %s\n"
-               "cpuid level\t: %d\n"
-               "wp\t\t: %s\n"
-               "flags\t\t:",
-               c->fdiv_bug ? "yes" : "no",
-               c->hlt_works_ok ? "no" : "yes",
-               c->f00f_bug ? "yes" : "no",
-               c->coma_bug ? "yes" : "no",
-               c->hard_math ? "yes" : "no",
-               fpu_exception ? "yes" : "no",
-               c->cpuid_level,
-               c->wp_works_ok ? "yes" : "no");
-
-    for ( i = 0 ; i < 32*NCAPINTS ; i++ )
-        if ( test_bit(i, &c->x86_capability) &&
-             x86_cap_flags[i] != NULL )
-            seq_printf(m, " %s", x86_cap_flags[i]);
-
-    seq_printf(m, "\nbogomips\t: %lu.%02lu\n\n",
-               c->loops_per_jiffy/(500000/HZ),
-               (c->loops_per_jiffy/(5000/HZ)) % 100);
-    return 0;
-}
-
-static void *c_start(struct seq_file *m, loff_t *pos)
-{
-    return *pos < NR_CPUS ? cpu_data + *pos : NULL;
-}
-static void *c_next(struct seq_file *m, void *v, loff_t *pos)
-{
-    ++*pos;
-    return c_start(m, pos);
-}
-static void c_stop(struct seq_file *m, void *v)
-{
-}
-struct seq_operations cpuinfo_op = {
-    start:     c_start,
-    next:      c_next,
-    stop:      c_stop,
-    show:      show_cpuinfo,
-};
-
-unsigned long cpu_initialized __initdata = 0;
-
-/*
- * cpu_init() initializes state that is per-CPU. Some data is already
- * initialized (naturally) in the bootstrap process, such as the GDT
- * and IDT. We reload them nevertheless, this function acts as a
- * 'CPU state barrier', nothing should get across.
- */
-void __init cpu_init (void)
-{
-    int nr = smp_processor_id();
-
-    if (test_and_set_bit(nr, &cpu_initialized)) {
-        printk(KERN_WARNING "CPU#%d already initialized!\n", nr);
-        for (;;) __sti();
-    }
-    printk(KERN_INFO "Initializing CPU#%d\n", nr);
-
-    /*
-     * set up and load the per-CPU TSS and LDT
-     */
-    atomic_inc(&init_mm.mm_count);
-    current->active_mm = &init_mm;
-    if(current->mm)
-        BUG();
-    enter_lazy_tlb(&init_mm, current, nr);
-
-    HYPERVISOR_stack_and_ldt_switch(__KERNEL_DS, current->thread.esp0, 0);
-
-    /* Force FPU initialization. */
-    current->flags &= ~PF_USEDFPU;
-    current->used_math = 0;
-    stts();
-}
-
-
-/******************************************************************************
- * Time-to-die callback handling.
- */
-
-static void time_to_die(int irq, void *unused, struct pt_regs *regs)
-{
-    extern void ctrl_alt_del(void);
-    ctrl_alt_del();
-}
-
-static int __init setup_death_event(void)
-{
-    (void)request_irq(_EVENT_DIE, time_to_die, 0, "die", NULL);
-    return 0;
-}
-
-__initcall(setup_death_event);
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/signal.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/signal.c
deleted file mode 100644 (file)
index a23cec1..0000000
+++ /dev/null
@@ -1,720 +0,0 @@
-/*
- *  linux/arch/i386/kernel/signal.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- *
- *  1997-11-28  Modified for POSIX.1b signals by Richard Henderson
- *  2000-06-20  Pentium III FXSR, SSE support by Gareth Hughes
- */
-
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/kernel.h>
-#include <linux/signal.h>
-#include <linux/errno.h>
-#include <linux/wait.h>
-#include <linux/ptrace.h>
-#include <linux/unistd.h>
-#include <linux/stddef.h>
-#include <linux/tty.h>
-#include <linux/personality.h>
-#include <asm/ucontext.h>
-#include <asm/uaccess.h>
-#include <asm/i387.h>
-
-#define DEBUG_SIG 0
-
-#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
-
-int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
-
-int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
-{
-       if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
-               return -EFAULT;
-       if (from->si_code < 0)
-               return __copy_to_user(to, from, sizeof(siginfo_t));
-       else {
-               int err;
-
-               /* If you change siginfo_t structure, please be sure
-                  this code is fixed accordingly.
-                  It should never copy any pad contained in the structure
-                  to avoid security leaks, but must copy the generic
-                  3 ints plus the relevant union member.  */
-               err = __put_user(from->si_signo, &to->si_signo);
-               err |= __put_user(from->si_errno, &to->si_errno);
-               err |= __put_user((short)from->si_code, &to->si_code);
-               /* First 32bits of unions are always present.  */
-               err |= __put_user(from->si_pid, &to->si_pid);
-               switch (from->si_code >> 16) {
-               case __SI_FAULT >> 16:
-                       break;
-               case __SI_CHLD >> 16:
-                       err |= __put_user(from->si_utime, &to->si_utime);
-                       err |= __put_user(from->si_stime, &to->si_stime);
-                       err |= __put_user(from->si_status, &to->si_status);
-               default:
-                       err |= __put_user(from->si_uid, &to->si_uid);
-                       break;
-               /* case __SI_RT: This is not generated by the kernel as of now.  */
-               }
-               return err;
-       }
-}
-
-/*
- * Atomically swap in the new signal mask, and wait for a signal.
- */
-asmlinkage int
-sys_sigsuspend(int history0, int history1, old_sigset_t mask)
-{
-       struct pt_regs * regs = (struct pt_regs *) &history0;
-       sigset_t saveset;
-
-       mask &= _BLOCKABLE;
-       spin_lock_irq(&current->sigmask_lock);
-       saveset = current->blocked;
-       siginitset(&current->blocked, mask);
-       recalc_sigpending(current);
-       spin_unlock_irq(&current->sigmask_lock);
-
-       regs->eax = -EINTR;
-       while (1) {
-               current->state = TASK_INTERRUPTIBLE;
-               schedule();
-               if (do_signal(regs, &saveset))
-                       return -EINTR;
-       }
-}
-
-asmlinkage int
-sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize)
-{
-       struct pt_regs * regs = (struct pt_regs *) &unewset;
-       sigset_t saveset, newset;
-
-       /* XXX: Don't preclude handling different sized sigset_t's.  */
-       if (sigsetsize != sizeof(sigset_t))
-               return -EINVAL;
-
-       if (copy_from_user(&newset, unewset, sizeof(newset)))
-               return -EFAULT;
-       sigdelsetmask(&newset, ~_BLOCKABLE);
-
-       spin_lock_irq(&current->sigmask_lock);
-       saveset = current->blocked;
-       current->blocked = newset;
-       recalc_sigpending(current);
-       spin_unlock_irq(&current->sigmask_lock);
-
-       regs->eax = -EINTR;
-       while (1) {
-               current->state = TASK_INTERRUPTIBLE;
-               schedule();
-               if (do_signal(regs, &saveset))
-                       return -EINTR;
-       }
-}
-
-asmlinkage int 
-sys_sigaction(int sig, const struct old_sigaction *act,
-             struct old_sigaction *oact)
-{
-       struct k_sigaction new_ka, old_ka;
-       int ret;
-
-       if (act) {
-               old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
-                   __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
-                   __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
-                       return -EFAULT;
-               __get_user(new_ka.sa.sa_flags, &act->sa_flags);
-               __get_user(mask, &act->sa_mask);
-               siginitset(&new_ka.sa.sa_mask, mask);
-       }
-
-       ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-
-       if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
-                   __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
-                   __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
-                       return -EFAULT;
-               __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
-               __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
-       }
-
-       return ret;
-}
-
-asmlinkage int
-sys_sigaltstack(const stack_t *uss, stack_t *uoss)
-{
-       struct pt_regs *regs = (struct pt_regs *) &uss;
-       return do_sigaltstack(uss, uoss, regs->esp);
-}
-
-
-/*
- * Do a signal return; undo the signal stack.
- */
-
-struct sigframe
-{
-       char *pretcode;
-       int sig;
-       struct sigcontext sc;
-       struct _fpstate fpstate;
-       unsigned long extramask[_NSIG_WORDS-1];
-       char retcode[8];
-};
-
-struct rt_sigframe
-{
-       char *pretcode;
-       int sig;
-       struct siginfo *pinfo;
-       void *puc;
-       struct siginfo info;
-       struct ucontext uc;
-       struct _fpstate fpstate;
-       char retcode[8];
-};
-
-static int
-restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *peax)
-{
-       unsigned int err = 0;
-
-#define COPY(x)                err |= __get_user(regs->x, &sc->x)
-
-#define COPY_SEG(seg)                                                  \
-       { unsigned short tmp;                                           \
-         err |= __get_user(tmp, &sc->seg);                             \
-         regs->x##seg = tmp; }
-
-#define COPY_SEG_STRICT(seg)                                           \
-       { unsigned short tmp;                                           \
-         err |= __get_user(tmp, &sc->seg);                             \
-         regs->x##seg = tmp|3; }
-
-#define GET_SEG(seg)                                                   \
-       { unsigned short tmp;                                           \
-         err |= __get_user(tmp, &sc->seg);                             \
-         loadsegment(seg,tmp); }
-
-       GET_SEG(gs);
-       GET_SEG(fs);
-       COPY_SEG(es);
-       COPY_SEG(ds);
-       COPY(edi);
-       COPY(esi);
-       COPY(ebp);
-       COPY(esp);
-       COPY(ebx);
-       COPY(edx);
-       COPY(ecx);
-       COPY(eip);
-       COPY_SEG_STRICT(cs);
-       COPY_SEG_STRICT(ss);
-       
-       {
-               unsigned int tmpflags;
-               err |= __get_user(tmpflags, &sc->eflags);
-               regs->eflags = (regs->eflags & ~0x40DD5) | (tmpflags & 0x40DD5);
-               regs->orig_eax = -1;            /* disable syscall checks */
-       }
-
-       {
-               struct _fpstate * buf;
-               err |= __get_user(buf, &sc->fpstate);
-               if (buf) {
-                       if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
-                               goto badframe;
-                       err |= restore_i387(buf);
-               }
-       }
-
-       err |= __get_user(*peax, &sc->eax);
-       return err;
-
-badframe:
-       return 1;
-}
-
-asmlinkage int sys_sigreturn(unsigned long __unused)
-{
-       struct pt_regs *regs = (struct pt_regs *) &__unused;
-       struct sigframe *frame = (struct sigframe *)(regs->esp - 8);
-       sigset_t set;
-       int eax;
-
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
-               goto badframe;
-       if (__get_user(set.sig[0], &frame->sc.oldmask)
-           || (_NSIG_WORDS > 1
-               && __copy_from_user(&set.sig[1], &frame->extramask,
-                                   sizeof(frame->extramask))))
-               goto badframe;
-
-       sigdelsetmask(&set, ~_BLOCKABLE);
-       spin_lock_irq(&current->sigmask_lock);
-       current->blocked = set;
-       recalc_sigpending(current);
-       spin_unlock_irq(&current->sigmask_lock);
-       
-       if (restore_sigcontext(regs, &frame->sc, &eax))
-               goto badframe;
-       return eax;
-
-badframe:
-       force_sig(SIGSEGV, current);
-       return 0;
-}      
-
-asmlinkage int sys_rt_sigreturn(unsigned long __unused)
-{
-       struct pt_regs *regs = (struct pt_regs *) &__unused;
-       struct rt_sigframe *frame = (struct rt_sigframe *)(regs->esp - 4);
-       sigset_t set;
-       stack_t st;
-       int eax;
-
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
-               goto badframe;
-       if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
-               goto badframe;
-
-       sigdelsetmask(&set, ~_BLOCKABLE);
-       spin_lock_irq(&current->sigmask_lock);
-       current->blocked = set;
-       recalc_sigpending(current);
-       spin_unlock_irq(&current->sigmask_lock);
-       
-       if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &eax))
-               goto badframe;
-
-       if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
-               goto badframe;
-       /* It is more difficult to avoid calling this function than to
-          call it and ignore errors.  */
-       do_sigaltstack(&st, NULL, regs->esp);
-
-       return eax;
-
-badframe:
-       force_sig(SIGSEGV, current);
-       return 0;
-}      
-
-/*
- * Set up a signal frame.
- */
-
-static int
-setup_sigcontext(struct sigcontext *sc, struct _fpstate *fpstate,
-                struct pt_regs *regs, unsigned long mask)
-{
-       int tmp, err = 0;
-
-       tmp = 0;
-       __asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
-       err |= __put_user(tmp, (unsigned int *)&sc->gs);
-       __asm__("movl %%fs,%0" : "=r"(tmp): "0"(tmp));
-       err |= __put_user(tmp, (unsigned int *)&sc->fs);
-
-       err |= __put_user(regs->xes, (unsigned int *)&sc->es);
-       err |= __put_user(regs->xds, (unsigned int *)&sc->ds);
-       err |= __put_user(regs->edi, &sc->edi);
-       err |= __put_user(regs->esi, &sc->esi);
-       err |= __put_user(regs->ebp, &sc->ebp);
-       err |= __put_user(regs->esp, &sc->esp);
-       err |= __put_user(regs->ebx, &sc->ebx);
-       err |= __put_user(regs->edx, &sc->edx);
-       err |= __put_user(regs->ecx, &sc->ecx);
-       err |= __put_user(regs->eax, &sc->eax);
-       err |= __put_user(current->thread.trap_no, &sc->trapno);
-       err |= __put_user(current->thread.error_code, &sc->err);
-       err |= __put_user(regs->eip, &sc->eip);
-       err |= __put_user(regs->xcs, (unsigned int *)&sc->cs);
-       err |= __put_user(regs->eflags, &sc->eflags);
-       err |= __put_user(regs->esp, &sc->esp_at_signal);
-       err |= __put_user(regs->xss, (unsigned int *)&sc->ss);
-
-       tmp = save_i387(fpstate);
-       if (tmp < 0)
-         err = 1;
-       else
-         err |= __put_user(tmp ? fpstate : NULL, &sc->fpstate);
-
-       /* non-iBCS2 extensions.. */
-       err |= __put_user(mask, &sc->oldmask);
-       err |= __put_user(current->thread.cr2, &sc->cr2);
-
-       return err;
-}
-
-/*
- * Determine which stack to use..
- */
-static inline void *
-get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
-{
-       unsigned long esp;
-
-       /* Default to using normal stack */
-       esp = regs->esp;
-
-       /* This is the X/Open sanctioned signal stack switching.  */
-       if (ka->sa.sa_flags & SA_ONSTACK) {
-               if (sas_ss_flags(esp) == 0)
-                       esp = current->sas_ss_sp + current->sas_ss_size;
-       }
-
-       /* This is the legacy signal stack switching. */
-       else if ((regs->xss & 0xffff) != __USER_DS &&
-                !(ka->sa.sa_flags & SA_RESTORER) &&
-                ka->sa.sa_restorer) {
-               esp = (unsigned long) ka->sa.sa_restorer;
-       }
-
-       return (void *)((esp - frame_size) & -8ul);
-}
-
-static void setup_frame(int sig, struct k_sigaction *ka,
-                       sigset_t *set, struct pt_regs * regs)
-{
-       struct sigframe *frame;
-       int err = 0;
-
-       frame = get_sigframe(ka, regs, sizeof(*frame));
-
-       if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-               goto give_sigsegv;
-
-       err |= __put_user((current->exec_domain
-                          && current->exec_domain->signal_invmap
-                          && sig < 32
-                          ? current->exec_domain->signal_invmap[sig]
-                          : sig),
-                         &frame->sig);
-       if (err)
-               goto give_sigsegv;
-
-       err |= setup_sigcontext(&frame->sc, &frame->fpstate, regs, set->sig[0]);
-       if (err)
-               goto give_sigsegv;
-
-       if (_NSIG_WORDS > 1) {
-               err |= __copy_to_user(frame->extramask, &set->sig[1],
-                                     sizeof(frame->extramask));
-       }
-       if (err)
-               goto give_sigsegv;
-
-       /* Set up to return from userspace.  If provided, use a stub
-          already in userspace.  */
-       if (ka->sa.sa_flags & SA_RESTORER) {
-               err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
-       } else {
-               err |= __put_user(frame->retcode, &frame->pretcode);
-               /* This is popl %eax ; movl $,%eax ; int $0x80 */
-               err |= __put_user(0xb858, (short *)(frame->retcode+0));
-               err |= __put_user(__NR_sigreturn, (int *)(frame->retcode+2));
-               err |= __put_user(0x80cd, (short *)(frame->retcode+6));
-       }
-
-       if (err)
-               goto give_sigsegv;
-
-       /* Set up registers for signal handler */
-       regs->esp = (unsigned long) frame;
-       regs->eip = (unsigned long) ka->sa.sa_handler;
-
-       set_fs(USER_DS);
-       regs->xds = __USER_DS;
-       regs->xes = __USER_DS;
-       regs->xss = __USER_DS;
-       regs->xcs = __USER_CS;
-       regs->eflags &= ~TF_MASK;
-
-#if DEBUG_SIG
-       printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
-               current->comm, current->pid, frame, regs->eip, frame->pretcode);
-#endif
-
-       return;
-
-give_sigsegv:
-       if (sig == SIGSEGV)
-               ka->sa.sa_handler = SIG_DFL;
-       force_sig(SIGSEGV, current);
-}
-
-static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
-                          sigset_t *set, struct pt_regs * regs)
-{
-       struct rt_sigframe *frame;
-       int err = 0;
-
-       frame = get_sigframe(ka, regs, sizeof(*frame));
-
-       if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-               goto give_sigsegv;
-
-       err |= __put_user((current->exec_domain
-                          && current->exec_domain->signal_invmap
-                          && sig < 32
-                          ? current->exec_domain->signal_invmap[sig]
-                          : sig),
-                         &frame->sig);
-       err |= __put_user(&frame->info, &frame->pinfo);
-       err |= __put_user(&frame->uc, &frame->puc);
-       err |= copy_siginfo_to_user(&frame->info, info);
-       if (err)
-               goto give_sigsegv;
-
-       /* Create the ucontext.  */
-       err |= __put_user(0, &frame->uc.uc_flags);
-       err |= __put_user(0, &frame->uc.uc_link);
-       err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-       err |= __put_user(sas_ss_flags(regs->esp),
-                         &frame->uc.uc_stack.ss_flags);
-       err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
-       err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->fpstate,
-                               regs, set->sig[0]);
-       err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
-       if (err)
-               goto give_sigsegv;
-
-       /* Set up to return from userspace.  If provided, use a stub
-          already in userspace.  */
-       if (ka->sa.sa_flags & SA_RESTORER) {
-               err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
-       } else {
-               err |= __put_user(frame->retcode, &frame->pretcode);
-               /* This is movl $,%eax ; int $0x80 */
-               err |= __put_user(0xb8, (char *)(frame->retcode+0));
-               err |= __put_user(__NR_rt_sigreturn, (int *)(frame->retcode+1));
-               err |= __put_user(0x80cd, (short *)(frame->retcode+5));
-       }
-
-       if (err)
-               goto give_sigsegv;
-
-       /* Set up registers for signal handler */
-       regs->esp = (unsigned long) frame;
-       regs->eip = (unsigned long) ka->sa.sa_handler;
-
-       set_fs(USER_DS);
-       regs->xds = __USER_DS;
-       regs->xes = __USER_DS;
-       regs->xss = __USER_DS;
-       regs->xcs = __USER_CS;
-       regs->eflags &= ~TF_MASK;
-
-#if DEBUG_SIG
-       printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
-               current->comm, current->pid, frame, regs->eip, frame->pretcode);
-#endif
-
-       return;
-
-give_sigsegv:
-       if (sig == SIGSEGV)
-               ka->sa.sa_handler = SIG_DFL;
-       force_sig(SIGSEGV, current);
-}
-
-/*
- * OK, we're invoking a handler
- */    
-
-static void
-handle_signal(unsigned long sig, struct k_sigaction *ka,
-             siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
-{
-       /* Are we from a system call? */
-       if (regs->orig_eax >= 0) {
-               /* If so, check system call restarting.. */
-               switch (regs->eax) {
-                       case -ERESTARTNOHAND:
-                               regs->eax = -EINTR;
-                               break;
-
-                       case -ERESTARTSYS:
-                               if (!(ka->sa.sa_flags & SA_RESTART)) {
-                                       regs->eax = -EINTR;
-                                       break;
-                               }
-                       /* fallthrough */
-                       case -ERESTARTNOINTR:
-                               regs->eax = regs->orig_eax;
-                               regs->eip -= 2;
-               }
-       }
-
-       /* Set up the stack frame */
-       if (ka->sa.sa_flags & SA_SIGINFO)
-               setup_rt_frame(sig, ka, info, oldset, regs);
-       else
-               setup_frame(sig, ka, oldset, regs);
-
-       if (ka->sa.sa_flags & SA_ONESHOT)
-               ka->sa.sa_handler = SIG_DFL;
-
-       if (!(ka->sa.sa_flags & SA_NODEFER)) {
-               spin_lock_irq(&current->sigmask_lock);
-               sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
-               sigaddset(&current->blocked,sig);
-               recalc_sigpending(current);
-               spin_unlock_irq(&current->sigmask_lock);
-       }
-}
-
-/*
- * Note that 'init' is a special process: it doesn't get signals it doesn't
- * want to handle. Thus you cannot kill init even with a SIGKILL even by
- * mistake.
- */
-int do_signal(struct pt_regs *regs, sigset_t *oldset)
-{
-       siginfo_t info;
-       struct k_sigaction *ka;
-
-       /*
-        * We want the common case to go fast, which
-        * is why we may in certain cases get here from
-        * kernel mode. Just return without doing anything
-        * if so.
-        */
-       if ((regs->xcs & 2) != 2)
-               return 1;
-
-       if (!oldset)
-               oldset = &current->blocked;
-
-       for (;;) {
-               unsigned long signr;
-
-               spin_lock_irq(&current->sigmask_lock);
-               signr = dequeue_signal(&current->blocked, &info);
-               spin_unlock_irq(&current->sigmask_lock);
-
-               if (!signr)
-                       break;
-
-               if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
-                       /* Let the debugger run.  */
-                       current->exit_code = signr;
-                       current->state = TASK_STOPPED;
-                       notify_parent(current, SIGCHLD);
-                       schedule();
-
-                       /* We're back.  Did the debugger cancel the sig?  */
-                       if (!(signr = current->exit_code))
-                               continue;
-                       current->exit_code = 0;
-
-                       /* The debugger continued.  Ignore SIGSTOP.  */
-                       if (signr == SIGSTOP)
-                               continue;
-
-                       /* Update the siginfo structure.  Is this good?  */
-                       if (signr != info.si_signo) {
-                               info.si_signo = signr;
-                               info.si_errno = 0;
-                               info.si_code = SI_USER;
-                               info.si_pid = current->p_pptr->pid;
-                               info.si_uid = current->p_pptr->uid;
-                       }
-
-                       /* If the (new) signal is now blocked, requeue it.  */
-                       if (sigismember(&current->blocked, signr)) {
-                               send_sig_info(signr, &info, current);
-                               continue;
-                       }
-               }
-
-               ka = &current->sig->action[signr-1];
-               if (ka->sa.sa_handler == SIG_IGN) {
-                       if (signr != SIGCHLD)
-                               continue;
-                       /* Check for SIGCHLD: it's special.  */
-                       while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
-                               /* nothing */;
-                       continue;
-               }
-
-               if (ka->sa.sa_handler == SIG_DFL) {
-                       int exit_code = signr;
-
-                       /* Init gets no signals it doesn't want.  */
-                       if (current->pid == 1)
-                               continue;
-
-                       switch (signr) {
-                       case SIGCONT: case SIGCHLD: case SIGWINCH:
-                               continue;
-
-                       case SIGTSTP: case SIGTTIN: case SIGTTOU:
-                               if (is_orphaned_pgrp(current->pgrp))
-                                       continue;
-                               /* FALLTHRU */
-
-                       case SIGSTOP: {
-                               struct signal_struct *sig;
-                               current->state = TASK_STOPPED;
-                               current->exit_code = signr;
-                               sig = current->p_pptr->sig;
-                               if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
-                                       notify_parent(current, SIGCHLD);
-                               schedule();
-                               continue;
-                       }
-
-                       case SIGQUIT: case SIGILL: case SIGTRAP:
-                       case SIGABRT: case SIGFPE: case SIGSEGV:
-                       case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
-                               if (do_coredump(signr, regs))
-                                       exit_code |= 0x80;
-                               /* FALLTHRU */
-
-                       default:
-                               sigaddset(&current->pending.signal, signr);
-                               recalc_sigpending(current);
-                               current->flags |= PF_SIGNALED;
-                               do_exit(exit_code);
-                               /* NOTREACHED */
-                       }
-               }
-
-                /* Reenable any watchpoints before delivering the
-                 * signal to user space. The processor register will
-                 * have been cleared if the watchpoint triggered
-                 * inside the kernel.
-                 */
-                if ( current->thread.debugreg[7] != 0 )
-                    HYPERVISOR_set_debugreg(7, current->thread.debugreg[7]);
-
-               /* Whee!  Actually deliver the signal.  */
-               handle_signal(signr, ka, &info, oldset, regs);
-               return 1;
-       }
-
-       /* Did we come from a system call? */
-       if (regs->orig_eax >= 0) {
-               /* Restart the system call - no handlers present */
-               if (regs->eax == -ERESTARTNOHAND ||
-                   regs->eax == -ERESTARTSYS ||
-                   regs->eax == -ERESTARTNOINTR) {
-                       regs->eax = regs->orig_eax;
-                       regs->eip -= 2;
-               }
-       }
-       return 0;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/sys_i386.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/sys_i386.c
deleted file mode 100644 (file)
index 5fd6910..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * linux/arch/i386/kernel/sys_i386.c
- *
- * This file contains various random system calls that
- * have a non-standard calling sequence on the Linux/i386
- * platform.
- */
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/sem.h>
-#include <linux/msg.h>
-#include <linux/shm.h>
-#include <linux/stat.h>
-#include <linux/mman.h>
-#include <linux/file.h>
-#include <linux/utsname.h>
-
-#include <asm/uaccess.h>
-#include <asm/ipc.h>
-
-/*
- * sys_pipe() is the normal C calling standard for creating
- * a pipe. It's not the way Unix traditionally does this, though.
- */
-asmlinkage int sys_pipe(unsigned long * fildes)
-{
-       int fd[2];
-       int error;
-
-       error = do_pipe(fd);
-       if (!error) {
-               if (copy_to_user(fildes, fd, 2*sizeof(int)))
-                       error = -EFAULT;
-       }
-       return error;
-}
-
-/* common code for old and new mmaps */
-static inline long do_mmap2(
-       unsigned long addr, unsigned long len,
-       unsigned long prot, unsigned long flags,
-       unsigned long fd, unsigned long pgoff)
-{
-       int error = -EBADF;
-       struct file * file = NULL;
-
-       flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
-       if (!(flags & MAP_ANONYMOUS)) {
-               file = fget(fd);
-               if (!file)
-                       goto out;
-       }
-
-       down_write(&current->mm->mmap_sem);
-       error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
-       up_write(&current->mm->mmap_sem);
-
-       if (file)
-               fput(file);
-out:
-       return error;
-}
-
-asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
-       unsigned long prot, unsigned long flags,
-       unsigned long fd, unsigned long pgoff)
-{
-       return do_mmap2(addr, len, prot, flags, fd, pgoff);
-}
-
-/*
- * Perform the select(nd, in, out, ex, tv) and mmap() system
- * calls. Linux/i386 didn't use to be able to handle more than
- * 4 system call parameters, so these system calls used a memory
- * block for parameter passing..
- */
-
-struct mmap_arg_struct {
-       unsigned long addr;
-       unsigned long len;
-       unsigned long prot;
-       unsigned long flags;
-       unsigned long fd;
-       unsigned long offset;
-};
-
-asmlinkage int old_mmap(struct mmap_arg_struct *arg)
-{
-       struct mmap_arg_struct a;
-       int err = -EFAULT;
-
-       if (copy_from_user(&a, arg, sizeof(a)))
-               goto out;
-
-       err = -EINVAL;
-       if (a.offset & ~PAGE_MASK)
-               goto out;
-
-       err = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT);
-out:
-       return err;
-}
-
-
-extern asmlinkage int sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
-
-struct sel_arg_struct {
-       unsigned long n;
-       fd_set *inp, *outp, *exp;
-       struct timeval *tvp;
-};
-
-asmlinkage int old_select(struct sel_arg_struct *arg)
-{
-       struct sel_arg_struct a;
-
-       if (copy_from_user(&a, arg, sizeof(a)))
-               return -EFAULT;
-       /* sys_select() does the appropriate kernel locking */
-       return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
-}
-
-/*
- * sys_ipc() is the de-multiplexer for the SysV IPC calls..
- *
- * This is really horribly ugly.
- */
-asmlinkage int sys_ipc (uint call, int first, int second,
-                       int third, void *ptr, long fifth)
-{
-       int version, ret;
-
-       version = call >> 16; /* hack for backward compatibility */
-       call &= 0xffff;
-
-       switch (call) {
-       case SEMOP:
-               return sys_semop (first, (struct sembuf *)ptr, second);
-       case SEMGET:
-               return sys_semget (first, second, third);
-       case SEMCTL: {
-               union semun fourth;
-               if (!ptr)
-                       return -EINVAL;
-               if (get_user(fourth.__pad, (void **) ptr))
-                       return -EFAULT;
-               return sys_semctl (first, second, third, fourth);
-       }
-
-       case MSGSND:
-               return sys_msgsnd (first, (struct msgbuf *) ptr, 
-                                  second, third);
-       case MSGRCV:
-               switch (version) {
-               case 0: {
-                       struct ipc_kludge tmp;
-                       if (!ptr)
-                               return -EINVAL;
-                       
-                       if (copy_from_user(&tmp,
-                                          (struct ipc_kludge *) ptr, 
-                                          sizeof (tmp)))
-                               return -EFAULT;
-                       return sys_msgrcv (first, tmp.msgp, second,
-                                          tmp.msgtyp, third);
-               }
-               default:
-                       return sys_msgrcv (first,
-                                          (struct msgbuf *) ptr,
-                                          second, fifth, third);
-               }
-       case MSGGET:
-               return sys_msgget ((key_t) first, second);
-       case MSGCTL:
-               return sys_msgctl (first, second, (struct msqid_ds *) ptr);
-
-       case SHMAT:
-               switch (version) {
-               default: {
-                       ulong raddr;
-                       ret = sys_shmat (first, (char *) ptr, second, &raddr);
-                       if (ret)
-                               return ret;
-                       return put_user (raddr, (ulong *) third);
-               }
-               case 1: /* iBCS2 emulator entry point */
-                       if (!segment_eq(get_fs(), get_ds()))
-                               return -EINVAL;
-                       return sys_shmat (first, (char *) ptr, second, (ulong *) third);
-               }
-       case SHMDT: 
-               return sys_shmdt ((char *)ptr);
-       case SHMGET:
-               return sys_shmget (first, second, third);
-       case SHMCTL:
-               return sys_shmctl (first, second,
-                                  (struct shmid_ds *) ptr);
-       default:
-               return -EINVAL;
-       }
-}
-
-/*
- * Old cruft
- */
-asmlinkage int sys_uname(struct old_utsname * name)
-{
-       int err;
-       if (!name)
-               return -EFAULT;
-       down_read(&uts_sem);
-       err=copy_to_user(name, &system_utsname, sizeof (*name));
-       up_read(&uts_sem);
-       return err?-EFAULT:0;
-}
-
-asmlinkage int sys_olduname(struct oldold_utsname * name)
-{
-       int error;
-
-       if (!name)
-               return -EFAULT;
-       if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
-               return -EFAULT;
-  
-       down_read(&uts_sem);
-       
-       error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN);
-       error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
-       error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
-       error |= __put_user(0,name->release+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
-       error |= __put_user(0,name->version+__OLD_UTS_LEN);
-       error |= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
-       error |= __put_user(0,name->machine+__OLD_UTS_LEN);
-       
-       up_read(&uts_sem);
-       
-       error = error ? -EFAULT : 0;
-
-       return error;
-}
-
-asmlinkage int sys_pause(void)
-{
-       current->state = TASK_INTERRUPTIBLE;
-       schedule();
-       return -ERESTARTNOHAND;
-}
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/time.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/time.c
deleted file mode 100644 (file)
index eb5757c..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/* -*-  Mode:C; c-basic-offset:4; tab-width:4 -*-
- ****************************************************************************
- * (C) 2002 - Rolf Neugebauer - Intel Research Cambridge
- ****************************************************************************
- *
- *        File: arch.xeno/time.c
- *      Author: Rolf Neugebauer
- *     Changes: 
- *              
- *        Date: Nov 2002
- * 
- * Environment: XenoLinux
- * Description: Interface with Hypervisor to get correct notion of time
- *              Currently supports Systemtime and WallClock time.
- *
- * (This has hardly any resemblence with the Linux code but left the
- *  copyright notice anyway. Ignore the comments in the copyright notice.)
- ****************************************************************************
- * $Id: c-insert.c,v 1.7 2002/11/08 16:04:34 rn Exp $
- ****************************************************************************
- */
-
-/*
- *  linux/arch/i386/kernel/time.c
- *
- *  Copyright (C) 1991, 1992, 1995  Linus Torvalds
- *
- * This file contains the PC-specific time handling details:
- * reading the RTC at bootup, etc..
- * 1994-07-02    Alan Modra
- *     fixed set_rtc_mmss, fixed time.year for >= 2000, new mktime
- * 1995-03-26    Markus Kuhn
- *      fixed 500 ms bug at call to set_rtc_mmss, fixed DS12887
- *      precision CMOS clock update
- * 1996-05-03    Ingo Molnar
- *      fixed time warps in do_[slow|fast]_gettimeoffset()
- * 1997-09-10  Updated NTP code according to technical memorandum Jan '96
- *             "A Kernel Model for Precision Timekeeping" by Dave Mills
- * 1998-09-05    (Various)
- *     More robust do_fast_gettimeoffset() algorithm implemented
- *     (works with APM, Cyrix 6x86MX and Centaur C6),
- *     monotonic gettimeofday() with fast_get_timeoffset(),
- *     drift-proof precision TSC calibration on boot
- *     (C. Scott Ananian <cananian@alumni.princeton.edu>, Andrew D.
- *     Balsa <andrebalsa@altern.org>, Philip Gladstone <philip@raptor.com>;
- *     ported from 2.0.35 Jumbo-9 by Michael Krause <m.krause@tu-harburg.de>).
- * 1998-12-16    Andrea Arcangeli
- *     Fixed Jumbo-9 code in 2.1.131: do_gettimeofday was missing 1 jiffy
- *     because was not accounting lost_ticks.
- * 1998-12-24 Copyright (C) 1998  Andrea Arcangeli
- *     Fixed a xtime SMP race (we need the xtime_lock rw spinlock to
- *     serialize accesses to xtime/lost_ticks).
- */
-
-#include <asm/smp.h>
-#include <asm/irq.h>
-#include <asm/msr.h>
-#include <asm/delay.h>
-#include <asm/mpspec.h>
-#include <asm/uaccess.h>
-#include <asm/processor.h>
-
-#include <asm/div64.h>
-#include <asm/hypervisor.h>
-
-#include <linux/kernel.h>
-#include <linux/interrupt.h>
-#include <linux/time.h>
-#include <linux/init.h>
-#include <linux/smp.h>
-#include <linux/irq.h>
-
-#undef XENO_TIME_DEBUG /* adds sanity checks and periodic printouts */
-
-spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
-extern rwlock_t xtime_lock;
-
-unsigned long cpu_khz; /* get this from Xen, used elsewhere */
-static spinlock_t hyp_stime_lock = SPIN_LOCK_UNLOCKED;
-static spinlock_t hyp_wctime_lock = SPIN_LOCK_UNLOCKED;
-
-static u32 st_scale_f;
-static u32 st_scale_i;
-static u32 shadow_st_pcc;
-static s64 shadow_st;
-
-/*
- * System time.
- * Although the rest of the Linux kernel doesn't know about this, we
- * we use it to extrapolate passage of wallclock time.
- * We need to read the values from the shared info page "atomically" 
- * and use the cycle counter value as the "version" number. Clashes
- * should be very rare.
- */
-static inline long long get_s_time(void)
-{
-       unsigned long flags;
-    u32           delta_tsc, low, pcc;
-       u64           delta;
-       s64           now;
-
-       spin_lock_irqsave(&hyp_stime_lock, flags);
-
-       while ((pcc = HYPERVISOR_shared_info->st_timestamp) != shadow_st_pcc)
-       {
-               barrier();
-               shadow_st_pcc = pcc;
-               shadow_st     = HYPERVISOR_shared_info->system_time;
-               barrier();
-       }
-
-    now = shadow_st;
-    /* only use bottom 32bits of TSC. This should be sufficient */
-       rdtscl(low);
-    delta_tsc = low - pcc;
-       delta = ((u64)delta_tsc * st_scale_f);
-       delta >>= 32;
-       delta += ((u64)delta_tsc * st_scale_i);
-
-       spin_unlock_irqrestore(&hyp_time_lock, flags);
-
-    return now + delta; 
-
-}
-#define NOW()                          ((long long)get_s_time())
-
-/*
- * Wallclock time.
- * Based on what the hypervisor tells us, extrapolated using system time.
- * Again need to read a number of values from the shared page "atomically".
- * this time using a version number.
- */
-static u32        shadow_wc_version=0;
-static long       shadow_tv_sec;
-static long       shadow_tv_usec;
-static long long  shadow_wc_timestamp;
-void do_gettimeofday(struct timeval *tv)
-{
-       unsigned long flags;
-    long          usec, sec;
-       u32               version;
-       u64           now;
-
-       spin_lock_irqsave(&hyp_wctime_lock, flags);
-
-       while ((version = HYPERVISOR_shared_info->wc_version)!= shadow_wc_version)
-       {
-               barrier();
-               shadow_wc_version   = version;
-               shadow_tv_sec       = HYPERVISOR_shared_info->tv_sec;
-               shadow_tv_usec      = HYPERVISOR_shared_info->tv_usec;
-               shadow_wc_timestamp = HYPERVISOR_shared_info->wc_timestamp;
-               barrier();
-       }
-
-       now   = NOW();
-       usec  = ((unsigned long)(now-shadow_wc_timestamp))/1000;
-       sec   = shadow_tv_sec;
-       usec += shadow_tv_usec;
-
-    while ( usec >= 1000000 ) 
-    {
-        usec -= 1000000;
-        sec++;
-    }
-
-    tv->tv_sec = sec;
-    tv->tv_usec = usec;
-
-       spin_unlock_irqrestore(&hyp_time_lock, flags);
-
-#ifdef XENO_TIME_DEBUG
-       {
-               static long long old_now=0;
-               static long long wct=0, old_wct=0;
-
-               /* This debug code checks if time increase over two subsequent calls */
-               wct=(((long long)sec) * 1000000) + usec;
-               /* wall clock time going backwards */
-               if ((wct < old_wct) ) { 
-                       printk("Urgh1: wc diff=%6ld, usec = %ld (0x%lX)\n",
-                                  (long)(wct-old_wct), usec, usec);            
-                       printk("       st diff=%lld cur st=0x%016llX old st=0x%016llX\n",
-                                  now-old_now, now, old_now);
-               }
-
-               /* system time going backwards */
-               if (now<=old_now) {
-                       printk("Urgh2: st diff=%lld cur st=0x%016llX old st=0x%016llX\n",
-                                  now-old_now, now, old_now);
-               }
-               old_wct  = wct;
-               old_now  = now;
-       }
-#endif
-
-}
-
-void do_settimeofday(struct timeval *tv)
-{
-/* XXX RN: should do something special here for dom0 */
-#if 0
-    write_lock_irq(&xtime_lock);
-    /*
-     * This is revolting. We need to set "xtime" correctly. However, the
-     * value in this location is the value at the most recent update of
-     * wall time.  Discover what correction gettimeofday() would have
-     * made, and then undo it!
-     */
-    tv->tv_usec -= do_gettimeoffset();
-    tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
-
-    while ( tv->tv_usec < 0 )
-    {
-        tv->tv_usec += 1000000;
-        tv->tv_sec--;
-    }
-
-    xtime = *tv;
-    time_adjust = 0;           /* stop active adjtime() */
-    time_status |= STA_UNSYNC;
-    time_maxerror = NTP_PHASE_LIMIT;
-    time_esterror = NTP_PHASE_LIMIT;
-    write_unlock_irq(&xtime_lock);
-#endif
-}
-
-
-/*
- * Timer ISR. 
- * Unlike normal Linux these don't come in at a fixed rate of HZ. 
- * In here we wrok out how often it should have been called and then call
- * the architecture independent part (do_timer()) the appropriate number of
- * times. A bit of a nasty hack, to keep the "other" notion of wallclock time
- * happy.
- */
-static long long us_per_tick=1000000/HZ;
-static long long last_irq;
-static inline void do_timer_interrupt(int irq, void *dev_id,
-                                                                         struct pt_regs *regs)
-{
-       struct timeval tv;
-       long long time, delta;
-       
-#ifdef XENO_TIME_DEBUG
-       static u32 foo_count = 0;
-       foo_count++;            
-       if (foo_count>= 1000) {
-               s64 n = NOW();
-               struct timeval tv;
-               do_gettimeofday(&tv);
-               printk("0x%08X%08X %ld:%ld\n",
-                          (u32)(n>>32), (u32)n, tv.tv_sec, tv.tv_usec);
-               foo_count = 0;
-       }
-#endif
-    /*
-     * The next bit really sucks:
-     * Linux not only uses do_gettimeofday() to keep a notion of
-     * wallclock time, but also maintains the xtime struct and jiffies.
-     * (Even worse some userland code accesses this via the sys_time()
-     * system call)
-     * Unfortunately, xtime is maintain in the architecture independent
-     * part of the timer ISR (./kernel/timer.c sic!). So, although we have
-     * perfectly valid notion of wallclock time from the hypervisor we here
-     * fake missed timer interrupts so that the arch independent part of
-     * the Timer ISR updates jiffies for us *and* once the bh gets run
-     * updates xtime accordingly. Yuck!
-     */
-
-       /* work out the number of jiffies past and update them */
-       do_gettimeofday(&tv);
-       time = (((long long)tv.tv_sec) * 1000000) + tv.tv_usec;
-       delta = time - last_irq;
-       if (delta <= 0) {
-               printk ("Timer ISR: Time went backwards: %lld\n", delta);
-               return;
-       }
-       while (delta >= us_per_tick) {
-               do_timer(regs);
-               delta    -= us_per_tick;
-               last_irq += us_per_tick;
-       }
-
-#if 0
-    if (!user_mode(regs))
-        x86_do_profile(regs->eip);
-#endif
-}
-
-static void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
-    write_lock(&xtime_lock);
-    do_timer_interrupt(irq, NULL, regs);
-    write_unlock(&xtime_lock);
-}
-
-static struct irqaction irq_timer = {
-    timer_interrupt, 
-    SA_INTERRUPT, 
-    0, 
-    "timer", 
-    NULL, 
-    NULL
-};
-
-void __init time_init(void)
-{
-    unsigned long long alarm;
-       u64     cpu_freq = HYPERVISOR_shared_info->cpu_freq;
-       u64 scale;
-
-       do_get_fast_time = do_gettimeofday;
-
-       cpu_khz = (u32)cpu_freq/1000;
-       printk("Xen reported: %lu.%03lu MHz processor.\n", 
-                  cpu_khz / 1000, cpu_khz % 1000);
-
-       /*
-     * calculate systemtime scaling factor
-        * XXX RN: have to cast cpu_freq to u32 limits it to 4.29 GHz. 
-        *     Get a better do_div!
-        */
-       scale = 1000000000LL << 32;
-       do_div(scale,(u32)cpu_freq);
-       st_scale_f = scale & 0xffffffff;
-       st_scale_i = scale >> 32;
-       printk("System Time scale: %X %X\n",st_scale_i, st_scale_f);
-
-       do_gettimeofday(&xtime);
-       last_irq = (((long long)xtime.tv_sec) * 1000000) + xtime.tv_usec;
-
-    setup_irq(TIMER_IRQ, &irq_timer);
-
-    /*
-     * Start ticker. Note that timing runs of wall clock, not virtual
-     * 'domain' time. This means that clock sshould run at the correct
-     * rate. For things like scheduling, it's not clear whether it
-     * matters which sort of time we use.
-        * XXX RN: unimplemented.
-     */
-
-    rdtscll(alarm);
-#if 0
-    alarm += (1000/HZ)*HYPERVISOR_shared_info->ticks_per_ms;
-    HYPERVISOR_shared_info->wall_timeout   = alarm;
-    HYPERVISOR_shared_info->domain_timeout = ~0ULL;
-#endif
-    clear_bit(_EVENT_TIMER, &HYPERVISOR_shared_info->events);
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/traps.c b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/traps.c
deleted file mode 100644 (file)
index c274928..0000000
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- *  linux/arch/i386/traps.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- *
- *  Pentium III FXSR, SSE support
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-/*
- * 'Traps.c' handles hardware traps and faults after we have saved some
- * state in 'asm.s'.
- */
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/ptrace.h>
-#include <linux/timer.h>
-#include <linux/mm.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/spinlock.h>
-#include <linux/interrupt.h>
-#include <linux/highmem.h>
-
-#include <linux/kdb.h>
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
-#include <asm/atomic.h>
-#include <asm/debugreg.h>
-#include <asm/desc.h>
-#include <asm/i387.h>
-
-#include <asm/smp.h>
-#include <asm/pgalloc.h>
-
-#include <asm/hypervisor.h>
-
-#include <linux/irq.h>
-#include <linux/module.h>
-
-asmlinkage int system_call(void);
-
-asmlinkage void divide_error(void);
-asmlinkage void debug(void);
-asmlinkage void int3(void);
-asmlinkage void overflow(void);
-asmlinkage void bounds(void);
-asmlinkage void invalid_op(void);
-asmlinkage void device_not_available(void);
-asmlinkage void double_fault(void);
-asmlinkage void coprocessor_segment_overrun(void);
-asmlinkage void invalid_TSS(void);
-asmlinkage void segment_not_present(void);
-asmlinkage void stack_segment(void);
-asmlinkage void general_protection(void);
-asmlinkage void page_fault(void);
-asmlinkage void coprocessor_error(void);
-asmlinkage void simd_coprocessor_error(void);
-asmlinkage void alignment_check(void);
-asmlinkage void spurious_interrupt_bug(void);
-asmlinkage void machine_check(void);
-
-int kstack_depth_to_print = 24;
-
-
-/*
- * If the address is either in the .text section of the
- * kernel, or in the vmalloc'ed module regions, it *may* 
- * be the address of a calling routine
- */
-
-#ifdef CONFIG_MODULES
-
-extern struct module *module_list;
-extern struct module kernel_module;
-
-static inline int kernel_text_address(unsigned long addr)
-{
-       int retval = 0;
-       struct module *mod;
-
-       if (addr >= (unsigned long) &_stext &&
-           addr <= (unsigned long) &_etext)
-               return 1;
-
-       for (mod = module_list; mod != &kernel_module; mod = mod->next) {
-               /* mod_bound tests for addr being inside the vmalloc'ed
-                * module area. Of course it'd be better to test only
-                * for the .text subset... */
-               if (mod_bound(addr, 0, mod)) {
-                       retval = 1;
-                       break;
-               }
-       }
-
-       return retval;
-}
-
-#else
-
-static inline int kernel_text_address(unsigned long addr)
-{
-       return (addr >= (unsigned long) &_stext &&
-               addr <= (unsigned long) &_etext);
-}
-
-#endif
-
-void show_trace(unsigned long * stack)
-{
-       int i;
-       unsigned long addr;
-
-       if (!stack)
-               stack = (unsigned long*)&stack;
-
-       printk("Call Trace: ");
-       i = 1;
-       while (((long) stack & (THREAD_SIZE-1)) != 0) {
-               addr = *stack++;
-               if (kernel_text_address(addr)) {
-                       if (i && ((i % 6) == 0))
-                               printk("\n   ");
-                       printk("[<%08lx>] ", addr);
-                       i++;
-               }
-       }
-       printk("\n");
-}
-
-void show_trace_task(struct task_struct *tsk)
-{
-       unsigned long esp = tsk->thread.esp;
-
-       /* User space on another CPU? */
-       if ((esp ^ (unsigned long)tsk) & (PAGE_MASK<<1))
-               return;
-       show_trace((unsigned long *)esp);
-}
-
-void show_stack(unsigned long * esp)
-{
-       unsigned long *stack;
-       int i;
-
-       // debugging aid: "show_stack(NULL);" prints the
-       // back trace for this cpu.
-
-       if(esp==NULL)
-               esp=(unsigned long*)&esp;
-
-       stack = esp;
-       for(i=0; i < kstack_depth_to_print; i++) {
-               if (((long) stack & (THREAD_SIZE-1)) == 0)
-                       break;
-               if (i && ((i % 8) == 0))
-                       printk("\n       ");
-               printk("%08lx ", *stack++);
-       }
-       printk("\n");
-       show_trace(esp);
-}
-
-void show_registers(struct pt_regs *regs)
-{
-       int i;
-       int in_kernel = 1;
-       unsigned long esp;
-       unsigned short ss;
-
-       esp = (unsigned long) (&regs->esp);
-       ss = __KERNEL_DS;
-       if (regs->xcs & 2) {
-               in_kernel = 0;
-               esp = regs->esp;
-               ss = regs->xss & 0xffff;
-       }
-       printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s\nEFLAGS: %08lx\n",
-               smp_processor_id(), 0xffff & regs->xcs, regs->eip, print_tainted(), regs->eflags);
-       printk("eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
-               regs->eax, regs->ebx, regs->ecx, regs->edx);
-       printk("esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
-               regs->esi, regs->edi, regs->ebp, esp);
-       printk("ds: %04x   es: %04x   ss: %04x\n",
-               regs->xds & 0xffff, regs->xes & 0xffff, ss);
-       printk("Process %s (pid: %d, stackpage=%08lx)",
-               current->comm, current->pid, 4096+(unsigned long)current);
-       /*
-        * When in-kernel, we also print out the stack and code at the
-        * time of the fault..
-        */
-       if (in_kernel) {
-
-               printk("\nStack: ");
-               show_stack((unsigned long*)esp);
-
-#if 0
-               printk("\nCode: ");
-               if(regs->eip < PAGE_OFFSET)
-                       goto bad;
-
-               for(i=0;i<20;i++)
-               {
-                       unsigned char c;
-                       if(__get_user(c, &((unsigned char*)regs->eip)[i])) {
-bad:
-                               printk(" Bad EIP value.");
-                               break;
-                       }
-                       printk("%02x ", c);
-               }
-#endif
-       }
-       printk("\n");
-}      
-
-spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
-
-void die(const char * str, struct pt_regs * regs, long err)
-{
-       console_verbose();
-       spin_lock_irq(&die_lock);
-       bust_spinlocks(1);
-       printk("%s: %04lx\n", str, err & 0xffff);
-       show_registers(regs);
-       bust_spinlocks(0);
-       spin_unlock_irq(&die_lock);
-       do_exit(SIGSEGV);
-}
-
-static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err)
-{
-       if (!(2 & regs->xcs))
-               die(str, regs, err);
-}
-
-
-static void inline do_trap(int trapnr, int signr, char *str,
-                          struct pt_regs * regs, long error_code,
-                           siginfo_t *info)
-{
-       if (!(regs->xcs & 2))
-               goto kernel_trap;
-
-       /*trap_signal:*/ {
-               struct task_struct *tsk = current;
-               tsk->thread.error_code = error_code;
-               tsk->thread.trap_no = trapnr;
-               if (info)
-                       force_sig_info(signr, info, tsk);
-               else
-                       force_sig(signr, tsk);
-               return;
-       }
-
-       kernel_trap: {
-               unsigned long fixup = search_exception_table(regs->eip);
-               if (fixup)
-                       regs->eip = fixup;
-               else    
-                       die(str, regs, error_code);
-               return;
-       }
-}
-
-#define DO_ERROR(trapnr, signr, str, name) \
-asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
-{ \
-       do_trap(trapnr, signr, str, regs, error_code, NULL); \
-}
-
-#define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
-asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
-{ \
-       siginfo_t info; \
-       info.si_signo = signr; \
-       info.si_errno = 0; \
-       info.si_code = sicode; \
-       info.si_addr = (void *)siaddr; \
-       do_trap(trapnr, signr, str, regs, error_code, &info); \
-}
-
-DO_ERROR_INFO( 0, SIGFPE,  "divide error", divide_error, FPE_INTDIV, regs->eip)
-DO_ERROR( 3, SIGTRAP, "int3", int3)
-DO_ERROR( 4, SIGSEGV, "overflow", overflow)
-DO_ERROR( 5, SIGSEGV, "bounds", bounds)
-DO_ERROR_INFO( 6, SIGILL,  "invalid operand", invalid_op, ILL_ILLOPN, regs->eip)
-DO_ERROR( 7, SIGSEGV, "device not available", device_not_available)
-DO_ERROR( 8, SIGSEGV, "double fault", double_fault)
-DO_ERROR( 9, SIGFPE,  "coprocessor segment overrun", coprocessor_segment_overrun)
-DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
-DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
-DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
-DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
-DO_ERROR(18, SIGBUS, "machine check", machine_check)
-
-asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
-{
-       if (!(regs->xcs & 2))
-               goto gp_in_kernel;
-
-       current->thread.error_code = error_code;
-       current->thread.trap_no = 13;
-       force_sig(SIGSEGV, current);
-       return;
-
-gp_in_kernel:
-       {
-               unsigned long fixup;
-               fixup = search_exception_table(regs->eip);
-               if (fixup) {
-                       regs->eip = fixup;
-                       return;
-               }
-               die("general protection fault", regs, error_code);
-       }
-}
-
-
-asmlinkage void do_debug(struct pt_regs * regs, long error_code)
-{
-    unsigned int condition;
-    struct task_struct *tsk = current;
-    siginfo_t info;
-
-    condition = HYPERVISOR_get_debugreg(6);
-
-    /* Mask out spurious debug traps due to lazy DR7 setting */
-    if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) {
-        if (!tsk->thread.debugreg[7])
-            goto clear_dr7;
-    }
-
-    /* Save debug status register where ptrace can see it */
-    tsk->thread.debugreg[6] = condition;
-
-    /* Mask out spurious TF errors due to lazy TF clearing */
-    if (condition & DR_STEP) {
-        /*
-         * The TF error should be masked out only if the current
-         * process is not traced and if the TRAP flag has been set
-         * previously by a tracing process (condition detected by
-         * the PT_DTRACE flag); remember that the i386 TRAP flag
-         * can be modified by the process itself in user mode,
-         * allowing programs to debug themselves without the ptrace()
-         * interface.
-         */
-        if ((tsk->ptrace & (PT_DTRACE|PT_PTRACED)) == PT_DTRACE)
-            goto clear_TF;
-    }
-
-    /* Ok, finally something we can handle */
-    tsk->thread.trap_no = 1;
-    tsk->thread.error_code = error_code;
-    info.si_signo = SIGTRAP;
-    info.si_errno = 0;
-    info.si_code = TRAP_BRKPT;
-        
-    /* If this is a kernel mode trap, save the user PC on entry to 
-     * the kernel, that's what the debugger can make sense of.
-     */
-    info.si_addr = ((regs->xcs & 3) == 0) ? (void *)tsk->thread.eip : 
-                                            (void *)regs->eip;
-    force_sig_info(SIGTRAP, &info, tsk);
-
-    /* Disable additional traps. They'll be re-enabled when
-     * the signal is delivered.
-     */
- clear_dr7:
-    HYPERVISOR_set_debugreg(7, 0);
-    return;
-
- clear_TF:
-    regs->eflags &= ~TF_MASK;
-    return;
-}
-
-
-/*
- * Note that we play around with the 'TS' bit in an attempt to get
- * the correct behaviour even in the presence of the asynchronous
- * IRQ13 behaviour
- */
-void math_error(void *eip)
-{
-       struct task_struct * task;
-       siginfo_t info;
-       unsigned short cwd, swd;
-
-       /*
-        * Save the info for the exception handler and clear the error.
-        */
-       task = current;
-       save_init_fpu(task);
-       task->thread.trap_no = 16;
-       task->thread.error_code = 0;
-       info.si_signo = SIGFPE;
-       info.si_errno = 0;
-       info.si_code = __SI_FAULT;
-       info.si_addr = eip;
-       /*
-        * (~cwd & swd) will mask out exceptions that are not set to unmasked
-        * status.  0x3f is the exception bits in these regs, 0x200 is the
-        * C1 reg you need in case of a stack fault, 0x040 is the stack
-        * fault bit.  We should only be taking one exception at a time,
-        * so if this combination doesn't produce any single exception,
-        * then we have a bad program that isn't syncronizing its FPU usage
-        * and it will suffer the consequences since we won't be able to
-        * fully reproduce the context of the exception
-        */
-       cwd = get_fpu_cwd(task);
-       swd = get_fpu_swd(task);
-       switch (((~cwd) & swd & 0x3f) | (swd & 0x240)) {
-               case 0x000:
-               default:
-                       break;
-               case 0x001: /* Invalid Op */
-               case 0x040: /* Stack Fault */
-               case 0x240: /* Stack Fault | Direction */
-                       info.si_code = FPE_FLTINV;
-                       break;
-               case 0x002: /* Denormalize */
-               case 0x010: /* Underflow */
-                       info.si_code = FPE_FLTUND;
-                       break;
-               case 0x004: /* Zero Divide */
-                       info.si_code = FPE_FLTDIV;
-                       break;
-               case 0x008: /* Overflow */
-                       info.si_code = FPE_FLTOVF;
-                       break;
-               case 0x020: /* Precision */
-                       info.si_code = FPE_FLTRES;
-                       break;
-       }
-       force_sig_info(SIGFPE, &info, task);
-}
-
-asmlinkage void do_coprocessor_error(struct pt_regs * regs, long error_code)
-{
-       ignore_irq13 = 1;
-       math_error((void *)regs->eip);
-}
-
-void simd_math_error(void *eip)
-{
-       struct task_struct * task;
-       siginfo_t info;
-       unsigned short mxcsr;
-
-       /*
-        * Save the info for the exception handler and clear the error.
-        */
-       task = current;
-       save_init_fpu(task);
-       task->thread.trap_no = 19;
-       task->thread.error_code = 0;
-       info.si_signo = SIGFPE;
-       info.si_errno = 0;
-       info.si_code = __SI_FAULT;
-       info.si_addr = eip;
-       /*
-        * The SIMD FPU exceptions are handled a little differently, as there
-        * is only a single status/control register.  Thus, to determine which
-        * unmasked exception was caught we must mask the exception mask bits
-        * at 0x1f80, and then use these to mask the exception bits at 0x3f.
-        */
-       mxcsr = get_fpu_mxcsr(task);
-       switch (~((mxcsr & 0x1f80) >> 7) & (mxcsr & 0x3f)) {
-               case 0x000:
-               default:
-                       break;
-               case 0x001: /* Invalid Op */
-                       info.si_code = FPE_FLTINV;
-                       break;
-               case 0x002: /* Denormalize */
-               case 0x010: /* Underflow */
-                       info.si_code = FPE_FLTUND;
-                       break;
-               case 0x004: /* Zero Divide */
-                       info.si_code = FPE_FLTDIV;
-                       break;
-               case 0x008: /* Overflow */
-                       info.si_code = FPE_FLTOVF;
-                       break;
-               case 0x020: /* Precision */
-                       info.si_code = FPE_FLTRES;
-                       break;
-       }
-       force_sig_info(SIGFPE, &info, task);
-}
-
-asmlinkage void do_simd_coprocessor_error(struct pt_regs * regs,
-                                         long error_code)
-{
-       if (cpu_has_xmm) {
-               /* Handle SIMD FPU exceptions on PIII+ processors. */
-               ignore_irq13 = 1;
-               simd_math_error((void *)regs->eip);
-       } else {
-               die_if_kernel("cache flush denied", regs, error_code);
-               current->thread.trap_no = 19;
-               current->thread.error_code = error_code;
-               force_sig(SIGSEGV, current);
-       }
-}
-
-asmlinkage void do_spurious_interrupt_bug(struct pt_regs * regs,
-                                         long error_code)
-{
-}
-
-/*
- *  'math_state_restore()' saves the current math information in the
- * old math state array, and gets the new ones from the current task
- *
- * Careful.. There are problems with IBM-designed IRQ13 behaviour.
- * Don't touch unless you *really* know how it works.
- */
-asmlinkage void math_state_restore(struct pt_regs regs)
-{
-       if (current->used_math) {
-               restore_fpu(current);
-       } else {
-               init_fpu();
-       }
-       current->flags |= PF_USEDFPU;   /* So we fnsave on switch_to() */
-}
-
-static trap_info_t trap_table[] = {
-    {  0, 0, __KERNEL_CS, (unsigned long)divide_error                },
-    {  1, 0, __KERNEL_CS, (unsigned long)debug                       },
-    {  3, 3, __KERNEL_CS, (unsigned long)int3                        },
-    {  4, 3, __KERNEL_CS, (unsigned long)overflow                    },
-    {  5, 3, __KERNEL_CS, (unsigned long)bounds                      },
-    {  6, 0, __KERNEL_CS, (unsigned long)invalid_op                  },
-    {  7, 0, __KERNEL_CS, (unsigned long)device_not_available        },
-    {  8, 0, __KERNEL_CS, (unsigned long)double_fault                },
-    {  9, 0, __KERNEL_CS, (unsigned long)coprocessor_segment_overrun },
-    { 10, 0, __KERNEL_CS, (unsigned long)invalid_TSS                 },
-    { 11, 0, __KERNEL_CS, (unsigned long)segment_not_present         },
-    { 12, 0, __KERNEL_CS, (unsigned long)stack_segment               },
-    { 13, 0, __KERNEL_CS, (unsigned long)general_protection          },
-    { 14, 0, __KERNEL_CS, (unsigned long)page_fault                  },
-    { 15, 0, __KERNEL_CS, (unsigned long)spurious_interrupt_bug      },
-    { 16, 0, __KERNEL_CS, (unsigned long)coprocessor_error           },
-    { 17, 0, __KERNEL_CS, (unsigned long)alignment_check             },
-    { 18, 0, __KERNEL_CS, (unsigned long)machine_check               },
-    { 19, 0, __KERNEL_CS, (unsigned long)simd_coprocessor_error      },
-    { SYSCALL_VECTOR, 
-          3, __KERNEL_CS, (unsigned long)system_call                 },
-    {  0, 0,           0, 0                           }
-};
-    
-
-
-void __init trap_init(void)
-{
-    HYPERVISOR_set_trap_table(trap_table);    
-    HYPERVISOR_set_fast_trap(SYSCALL_VECTOR);
-    cpu_init();
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/Makefile
deleted file mode 100644 (file)
index 2224f03..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-.S.o:
-       $(CC) $(AFLAGS) -c $< -o $*.o
-
-L_TARGET = lib.a
-
-obj-y = checksum.o old-checksum.o delay.o \
-       usercopy.o getuser.o \
-       memcpy.o strstr.o
-
-obj-$(CONFIG_X86_USE_3DNOW) += mmx.o
-obj-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o
-obj-$(CONFIG_DEBUG_IOVIRT)  += iodebug.o
-
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/checksum.S b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/checksum.S
deleted file mode 100644 (file)
index bfc6389..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * INET                An implementation of the TCP/IP protocol suite for the LINUX
- *             operating system.  INET is implemented using the  BSD Socket
- *             interface as the means of communication with the user level.
- *
- *             IP/TCP/UDP checksumming routines
- *
- * Authors:    Jorge Cwik, <jorge@laser.satlink.net>
- *             Arnt Gulbrandsen, <agulbra@nvg.unit.no>
- *             Tom May, <ftom@netcom.com>
- *              Pentium Pro/II routines:
- *              Alexander Kjeldaas <astor@guardian.no>
- *              Finn Arne Gangstad <finnag@guardian.no>
- *             Lots of code moved from tcp.c and ip.c; see those files
- *             for more names.
- *
- * Changes:     Ingo Molnar, converted csum_partial_copy() to 2.1 exception
- *                          handling.
- *             Andi Kleen,  add zeroing on error
- *                   converted to pure assembler
- *
- *             This program is free software; you can redistribute it and/or
- *             modify it under the terms of the GNU General Public License
- *             as published by the Free Software Foundation; either version
- *             2 of the License, or (at your option) any later version.
- */
-
-#include <linux/config.h>
-#include <asm/errno.h>
-                               
-/*
- * computes a partial checksum, e.g. for TCP/UDP fragments
- */
-
-/*     
-unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum)
- */
-               
-.text
-.align 4
-.globl csum_partial                                                            
-               
-#ifndef CONFIG_X86_USE_PPRO_CHECKSUM
-
-         /*            
-          * Experiments with Ethernet and SLIP connections show that buff
-          * is aligned on either a 2-byte or 4-byte boundary.  We get at
-          * least a twofold speedup on 486 and Pentium if it is 4-byte aligned.
-          * Fortunately, it is easy to convert 2-byte alignment to 4-byte
-          * alignment for the unrolled loop.
-          */           
-csum_partial:  
-       pushl %esi
-       pushl %ebx
-       movl 20(%esp),%eax      # Function arg: unsigned int sum
-       movl 16(%esp),%ecx      # Function arg: int len
-       movl 12(%esp),%esi      # Function arg: unsigned char *buff
-       testl $2, %esi          # Check alignment.
-       jz 2f                   # Jump if alignment is ok.
-       subl $2, %ecx           # Alignment uses up two bytes.
-       jae 1f                  # Jump if we had at least two bytes.
-       addl $2, %ecx           # ecx was < 2.  Deal with it.
-       jmp 4f
-1:     movw (%esi), %bx
-       addl $2, %esi
-       addw %bx, %ax
-       adcl $0, %eax
-2:
-       movl %ecx, %edx
-       shrl $5, %ecx
-       jz 2f
-       testl %esi, %esi
-1:     movl (%esi), %ebx
-       adcl %ebx, %eax
-       movl 4(%esi), %ebx
-       adcl %ebx, %eax
-       movl 8(%esi), %ebx
-       adcl %ebx, %eax
-       movl 12(%esi), %ebx
-       adcl %ebx, %eax
-       movl 16(%esi), %ebx
-       adcl %ebx, %eax
-       movl 20(%esi), %ebx
-       adcl %ebx, %eax
-       movl 24(%esi), %ebx
-       adcl %ebx, %eax
-       movl 28(%esi), %ebx
-       adcl %ebx, %eax
-       lea 32(%esi), %esi
-       dec %ecx
-       jne 1b
-       adcl $0, %eax
-2:     movl %edx, %ecx
-       andl $0x1c, %edx
-       je 4f
-       shrl $2, %edx           # This clears CF
-3:     adcl (%esi), %eax
-       lea 4(%esi), %esi
-       dec %edx
-       jne 3b
-       adcl $0, %eax
-4:     andl $3, %ecx
-       jz 7f
-       cmpl $2, %ecx
-       jb 5f
-       movw (%esi),%cx
-       leal 2(%esi),%esi
-       je 6f
-       shll $16,%ecx
-5:     movb (%esi),%cl
-6:     addl %ecx,%eax
-       adcl $0, %eax 
-7:     
-       popl %ebx
-       popl %esi
-       ret
-
-#else
-
-/* Version for PentiumII/PPro */
-
-csum_partial:
-       pushl %esi
-       pushl %ebx
-       movl 20(%esp),%eax      # Function arg: unsigned int sum
-       movl 16(%esp),%ecx      # Function arg: int len
-       movl 12(%esp),%esi      # Function arg: const unsigned char *buf
-
-       testl $2, %esi         
-       jnz 30f                 
-10:
-       movl %ecx, %edx
-       movl %ecx, %ebx
-       andl $0x7c, %ebx
-       shrl $7, %ecx
-       addl %ebx,%esi
-       shrl $2, %ebx  
-       negl %ebx
-       lea 45f(%ebx,%ebx,2), %ebx
-       testl %esi, %esi
-       jmp *%ebx
-
-       # Handle 2-byte-aligned regions
-20:    addw (%esi), %ax
-       lea 2(%esi), %esi
-       adcl $0, %eax
-       jmp 10b
-
-30:    subl $2, %ecx          
-       ja 20b                 
-       je 32f
-       movzbl (%esi),%ebx      # csumming 1 byte, 2-aligned
-       addl %ebx, %eax
-       adcl $0, %eax
-       jmp 80f
-32:
-       addw (%esi), %ax        # csumming 2 bytes, 2-aligned
-       adcl $0, %eax
-       jmp 80f
-
-40: 
-       addl -128(%esi), %eax
-       adcl -124(%esi), %eax
-       adcl -120(%esi), %eax
-       adcl -116(%esi), %eax   
-       adcl -112(%esi), %eax   
-       adcl -108(%esi), %eax
-       adcl -104(%esi), %eax
-       adcl -100(%esi), %eax
-       adcl -96(%esi), %eax
-       adcl -92(%esi), %eax
-       adcl -88(%esi), %eax
-       adcl -84(%esi), %eax
-       adcl -80(%esi), %eax
-       adcl -76(%esi), %eax
-       adcl -72(%esi), %eax
-       adcl -68(%esi), %eax
-       adcl -64(%esi), %eax     
-       adcl -60(%esi), %eax     
-       adcl -56(%esi), %eax     
-       adcl -52(%esi), %eax   
-       adcl -48(%esi), %eax   
-       adcl -44(%esi), %eax
-       adcl -40(%esi), %eax
-       adcl -36(%esi), %eax
-       adcl -32(%esi), %eax
-       adcl -28(%esi), %eax
-       adcl -24(%esi), %eax
-       adcl -20(%esi), %eax
-       adcl -16(%esi), %eax
-       adcl -12(%esi), %eax
-       adcl -8(%esi), %eax
-       adcl -4(%esi), %eax
-45:
-       lea 128(%esi), %esi
-       adcl $0, %eax
-       dec %ecx
-       jge 40b
-       movl %edx, %ecx
-50:    andl $3, %ecx
-       jz 80f
-
-       # Handle the last 1-3 bytes without jumping
-       notl %ecx               # 1->2, 2->1, 3->0, higher bits are masked
-       movl $0xffffff,%ebx     # by the shll and shrl instructions
-       shll $3,%ecx
-       shrl %cl,%ebx
-       andl -128(%esi),%ebx    # esi is 4-aligned so should be ok
-       addl %ebx,%eax
-       adcl $0,%eax
-80: 
-       popl %ebx
-       popl %esi
-       ret
-                               
-#endif
-
-/*
-unsigned int csum_partial_copy_generic (const char *src, char *dst,
-                                 int len, int sum, int *src_err_ptr, int *dst_err_ptr)
- */ 
-
-/*
- * Copy from ds while checksumming, otherwise like csum_partial
- *
- * The macros SRC and DST specify the type of access for the instruction.
- * thus we can call a custom exception handler for all access types.
- *
- * FIXME: could someone double-check whether I haven't mixed up some SRC and
- *       DST definitions? It's damn hard to trigger all cases.  I hope I got
- *       them all but there's no guarantee.
- */
-
-#define SRC(y...)                      \
-       9999: y;                        \
-       .section __ex_table, "a";       \
-       .long 9999b, 6001f      ;       \
-       .previous
-
-#define DST(y...)                      \
-       9999: y;                        \
-       .section __ex_table, "a";       \
-       .long 9999b, 6002f      ;       \
-       .previous
-
-.align 4
-.globl csum_partial_copy_generic
-                               
-#ifndef CONFIG_X86_USE_PPRO_CHECKSUM
-
-#define ARGBASE 16             
-#define FP             12
-               
-csum_partial_copy_generic:
-       subl  $4,%esp   
-       pushl %edi
-       pushl %esi
-       pushl %ebx
-       movl ARGBASE+16(%esp),%eax      # sum
-       movl ARGBASE+12(%esp),%ecx      # len
-       movl ARGBASE+4(%esp),%esi       # src
-       movl ARGBASE+8(%esp),%edi       # dst
-
-       testl $2, %edi                  # Check alignment. 
-       jz 2f                           # Jump if alignment is ok.
-       subl $2, %ecx                   # Alignment uses up two bytes.
-       jae 1f                          # Jump if we had at least two bytes.
-       addl $2, %ecx                   # ecx was < 2.  Deal with it.
-       jmp 4f
-SRC(1: movw (%esi), %bx        )
-       addl $2, %esi
-DST(   movw %bx, (%edi)        )
-       addl $2, %edi
-       addw %bx, %ax   
-       adcl $0, %eax
-2:
-       movl %ecx, FP(%esp)
-       shrl $5, %ecx
-       jz 2f
-       testl %esi, %esi
-SRC(1: movl (%esi), %ebx       )
-SRC(   movl 4(%esi), %edx      )
-       adcl %ebx, %eax
-DST(   movl %ebx, (%edi)       )
-       adcl %edx, %eax
-DST(   movl %edx, 4(%edi)      )
-
-SRC(   movl 8(%esi), %ebx      )
-SRC(   movl 12(%esi), %edx     )
-       adcl %ebx, %eax
-DST(   movl %ebx, 8(%edi)      )
-       adcl %edx, %eax
-DST(   movl %edx, 12(%edi)     )
-
-SRC(   movl 16(%esi), %ebx     )
-SRC(   movl 20(%esi), %edx     )
-       adcl %ebx, %eax
-DST(   movl %ebx, 16(%edi)     )
-       adcl %edx, %eax
-DST(   movl %edx, 20(%edi)     )
-
-SRC(   movl 24(%esi), %ebx     )
-SRC(   movl 28(%esi), %edx     )
-       adcl %ebx, %eax
-DST(   movl %ebx, 24(%edi)     )
-       adcl %edx, %eax
-DST(   movl %edx, 28(%edi)     )
-
-       lea 32(%esi), %esi
-       lea 32(%edi), %edi
-       dec %ecx
-       jne 1b
-       adcl $0, %eax
-2:     movl FP(%esp), %edx
-       movl %edx, %ecx
-       andl $0x1c, %edx
-       je 4f
-       shrl $2, %edx                   # This clears CF
-SRC(3: movl (%esi), %ebx       )
-       adcl %ebx, %eax
-DST(   movl %ebx, (%edi)       )
-       lea 4(%esi), %esi
-       lea 4(%edi), %edi
-       dec %edx
-       jne 3b
-       adcl $0, %eax
-4:     andl $3, %ecx
-       jz 7f
-       cmpl $2, %ecx
-       jb 5f
-SRC(   movw (%esi), %cx        )
-       leal 2(%esi), %esi
-DST(   movw %cx, (%edi)        )
-       leal 2(%edi), %edi
-       je 6f
-       shll $16,%ecx
-SRC(5: movb (%esi), %cl        )
-DST(   movb %cl, (%edi)        )
-6:     addl %ecx, %eax
-       adcl $0, %eax
-7:
-5000:
-
-# Exception handler:
-.section .fixup, "ax"                                                  
-
-6001:
-       movl ARGBASE+20(%esp), %ebx     # src_err_ptr
-       movl $-EFAULT, (%ebx)
-
-       # zero the complete destination - computing the rest
-       # is too much work 
-       movl ARGBASE+8(%esp), %edi      # dst
-       movl ARGBASE+12(%esp), %ecx     # len
-       xorl %eax,%eax
-       rep ; stosb
-
-       jmp 5000b
-
-6002:
-       movl ARGBASE+24(%esp), %ebx     # dst_err_ptr
-       movl $-EFAULT,(%ebx)
-       jmp 5000b
-
-.previous
-
-       popl %ebx
-       popl %esi
-       popl %edi
-       popl %ecx                       # equivalent to addl $4,%esp
-       ret     
-
-#else
-
-/* Version for PentiumII/PPro */
-
-#define ROUND1(x) \
-       SRC(movl x(%esi), %ebx  )       ;       \
-       addl %ebx, %eax                 ;       \
-       DST(movl %ebx, x(%edi)  )       ; 
-
-#define ROUND(x) \
-       SRC(movl x(%esi), %ebx  )       ;       \
-       adcl %ebx, %eax                 ;       \
-       DST(movl %ebx, x(%edi)  )       ;
-
-#define ARGBASE 12
-               
-csum_partial_copy_generic:
-       pushl %ebx
-       pushl %edi
-       pushl %esi
-       movl ARGBASE+4(%esp),%esi       #src
-       movl ARGBASE+8(%esp),%edi       #dst    
-       movl ARGBASE+12(%esp),%ecx      #len
-       movl ARGBASE+16(%esp),%eax      #sum
-#      movl %ecx, %edx  
-       movl %ecx, %ebx  
-       movl %esi, %edx
-       shrl $6, %ecx     
-       andl $0x3c, %ebx  
-       negl %ebx
-       subl %ebx, %esi  
-       subl %ebx, %edi  
-       lea  -1(%esi),%edx
-       andl $-32,%edx
-       lea 3f(%ebx,%ebx), %ebx
-       testl %esi, %esi 
-       jmp *%ebx
-1:     addl $64,%esi
-       addl $64,%edi 
-       SRC(movb -32(%edx),%bl) ; SRC(movb (%edx),%bl)
-       ROUND1(-64) ROUND(-60) ROUND(-56) ROUND(-52)    
-       ROUND (-48) ROUND(-44) ROUND(-40) ROUND(-36)    
-       ROUND (-32) ROUND(-28) ROUND(-24) ROUND(-20)    
-       ROUND (-16) ROUND(-12) ROUND(-8)  ROUND(-4)     
-3:     adcl $0,%eax
-       addl $64, %edx
-       dec %ecx
-       jge 1b
-4:     movl ARGBASE+12(%esp),%edx      #len
-       andl $3, %edx
-       jz 7f
-       cmpl $2, %edx
-       jb 5f
-SRC(   movw (%esi), %dx         )
-       leal 2(%esi), %esi
-DST(   movw %dx, (%edi)         )
-       leal 2(%edi), %edi
-       je 6f
-       shll $16,%edx
-5:
-SRC(   movb (%esi), %dl         )
-DST(   movb %dl, (%edi)         )
-6:     addl %edx, %eax
-       adcl $0, %eax
-7:
-.section .fixup, "ax"
-6001:  movl    ARGBASE+20(%esp), %ebx  # src_err_ptr   
-       movl $-EFAULT, (%ebx)
-       # zero the complete destination (computing the rest is too much work)
-       movl ARGBASE+8(%esp),%edi       # dst
-       movl ARGBASE+12(%esp),%ecx      # len
-       xorl %eax,%eax
-       rep; stosb
-       jmp 7b
-6002:  movl ARGBASE+24(%esp), %ebx     # dst_err_ptr
-       movl $-EFAULT, (%ebx)
-       jmp  7b                 
-.previous                              
-
-       popl %esi
-       popl %edi
-       popl %ebx
-       ret
-                               
-#undef ROUND
-#undef ROUND1          
-               
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/dec_and_lock.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/dec_and_lock.c
deleted file mode 100644 (file)
index ffd4869..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * x86 version of "atomic_dec_and_lock()" using
- * the atomic "cmpxchg" instruction.
- *
- * (For CPU's lacking cmpxchg, we use the slow
- * generic version, and this one never even gets
- * compiled).
- */
-
-#include <linux/spinlock.h>
-#include <asm/atomic.h>
-
-int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
-{
-       int counter;
-       int newcount;
-
-repeat:
-       counter = atomic_read(atomic);
-       newcount = counter-1;
-
-       if (!newcount)
-               goto slow_path;
-
-       asm volatile("lock; cmpxchgl %1,%2"
-               :"=a" (newcount)
-               :"r" (newcount), "m" (atomic->counter), "0" (counter));
-
-       /* If the above failed, "eax" will have changed */
-       if (newcount != counter)
-               goto repeat;
-       return 0;
-
-slow_path:
-       spin_lock(lock);
-       if (atomic_dec_and_test(atomic))
-               return 1;
-       spin_unlock(lock);
-       return 0;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/delay.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/delay.c
deleted file mode 100644 (file)
index c918026..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *     Precise Delay Loops for i386
- *
- *     Copyright (C) 1993 Linus Torvalds
- *     Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
- *
- *     The __delay function must _NOT_ be inlined as its execution time
- *     depends wildly on alignment on many x86 processors. The additional
- *     jump magic is needed to get the timing stable on all the CPU's
- *     we have to worry about.
- */
-
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/delay.h>
-#include <asm/processor.h>
-#include <asm/delay.h>
-
-#ifdef CONFIG_SMP
-#include <asm/smp.h>
-#endif
-       
-void __delay(unsigned long loops)
-{
-       unsigned long bclock, now;
-       
-       rdtscl(bclock);
-       do
-       {
-               rep_nop();
-               rdtscl(now);
-       } while ((now-bclock) < loops);
-}
-
-inline void __const_udelay(unsigned long xloops)
-{
-       int d0;
-       __asm__("mull %0"
-               :"=d" (xloops), "=&a" (d0)
-               :"1" (xloops),"0" (current_cpu_data.loops_per_jiffy));
-        __delay(xloops * HZ);
-}
-
-void __udelay(unsigned long usecs)
-{
-       __const_udelay(usecs * 0x000010c6);  /* 2**32 / 1000000 */
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/getuser.S b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/getuser.S
deleted file mode 100644 (file)
index c244721..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * __get_user functions.
- *
- * (C) Copyright 1998 Linus Torvalds
- *
- * These functions have a non-standard call interface
- * to make them more efficient, especially as they
- * return an error value in addition to the "real"
- * return value.
- */
-
-/*
- * __get_user_X
- *
- * Inputs:     %eax contains the address
- *
- * Outputs:    %eax is error code (0 or -EFAULT)
- *             %edx contains zero-extended value
- *
- * These functions should not modify any other registers,
- * as they get called from within inline assembly.
- */
-
-addr_limit = 12
-
-.text
-.align 4
-.globl __get_user_1
-__get_user_1:
-       movl %esp,%edx
-       andl $0xffffe000,%edx
-       cmpl addr_limit(%edx),%eax
-       jae bad_get_user
-1:     movzbl (%eax),%edx
-       xorl %eax,%eax
-       ret
-
-.align 4
-.globl __get_user_2
-__get_user_2:
-       addl $1,%eax
-       movl %esp,%edx
-       jc bad_get_user
-       andl $0xffffe000,%edx
-       cmpl addr_limit(%edx),%eax
-       jae bad_get_user
-2:     movzwl -1(%eax),%edx
-       xorl %eax,%eax
-       ret
-
-.align 4
-.globl __get_user_4
-__get_user_4:
-       addl $3,%eax
-       movl %esp,%edx
-       jc bad_get_user
-       andl $0xffffe000,%edx
-       cmpl addr_limit(%edx),%eax
-       jae bad_get_user
-3:     movl -3(%eax),%edx
-       xorl %eax,%eax
-       ret
-
-bad_get_user:
-       xorl %edx,%edx
-       movl $-14,%eax
-       ret
-
-.section __ex_table,"a"
-       .long 1b,bad_get_user
-       .long 2b,bad_get_user
-       .long 3b,bad_get_user
-.previous
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/iodebug.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/iodebug.c
deleted file mode 100644 (file)
index 701a07f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <asm/io.h>
-
-void * __io_virt_debug(unsigned long x, const char *file, int line)
-{
-       if (x < PAGE_OFFSET) {
-               printk("io mapaddr 0x%05lx not valid at %s:%d!\n", x, file, line);
-               return __va(x);
-       }
-       return (void *)x;
-}
-
-unsigned long __io_phys_debug(unsigned long x, const char *file, int line)
-{
-       if (x < PAGE_OFFSET) {
-               printk("io mapaddr 0x%05lx not valid at %s:%d!\n", x, file, line);
-               return x;
-       }
-       return __pa(x);
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/memcpy.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/memcpy.c
deleted file mode 100644 (file)
index 4cb37b6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <linux/config.h>
-#include <linux/string.h>
-
-#undef memcpy
-#undef memset
-
-void * memcpy(void * to, const void * from, size_t n)
-{
-#ifdef CONFIG_X86_USE_3DNOW
-       return __memcpy3d(to, from, n);
-#else
-       return __memcpy(to, from, n);
-#endif
-}
-
-void * memset(void * s, int c, size_t count)
-{
-       return __memset(s, c, count);
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/mmx.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/mmx.c
deleted file mode 100644 (file)
index 0433cfa..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/string.h>
-#include <linux/sched.h>
-
-#include <asm/i387.h>
-#include <asm/hardirq.h> 
-
-
-/*
- *     MMX 3DNow! library helper functions
- *
- *     To do:
- *     We can use MMX just for prefetch in IRQ's. This may be a win. 
- *             (reported so on K6-III)
- *     We should use a better code neutral filler for the short jump
- *             leal ebx. [ebx] is apparently best for K6-2, but Cyrix ??
- *     We also want to clobber the filler register so we dont get any
- *             register forwarding stalls on the filler. 
- *
- *     Add *user handling. Checksums are not a win with MMX on any CPU
- *     tested so far for any MMX solution figured.
- *
- *     22/09/2000 - Arjan van de Ven 
- *             Improved for non-egineering-sample Athlons 
- *
- */
-void *_mmx_memcpy(void *to, const void *from, size_t len)
-{
-       void *p;
-       int i;
-
-       if (in_interrupt())
-               return __memcpy(to, from, len);
-
-       p = to;
-       i = len >> 6; /* len/64 */
-
-       kernel_fpu_begin();
-
-       __asm__ __volatile__ (
-               "1: prefetch (%0)\n"            /* This set is 28 bytes */
-               "   prefetch 64(%0)\n"
-               "   prefetch 128(%0)\n"
-               "   prefetch 192(%0)\n"
-               "   prefetch 256(%0)\n"
-               "2:  \n"
-               ".section .fixup, \"ax\"\n"
-               "3: movw $0x1AEB, 1b\n" /* jmp on 26 bytes */
-               "   jmp 2b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 1b, 3b\n"
-               ".previous"
-               : : "r" (from) );
-               
-       
-       for(; i>0; i--)
-       {
-               __asm__ __volatile__ (
-               "1:  prefetch 320(%0)\n"
-               "2:  movq (%0), %%mm0\n"
-               "  movq 8(%0), %%mm1\n"
-               "  movq 16(%0), %%mm2\n"
-               "  movq 24(%0), %%mm3\n"
-               "  movq %%mm0, (%1)\n"
-               "  movq %%mm1, 8(%1)\n"
-               "  movq %%mm2, 16(%1)\n"
-               "  movq %%mm3, 24(%1)\n"
-               "  movq 32(%0), %%mm0\n"
-               "  movq 40(%0), %%mm1\n"
-               "  movq 48(%0), %%mm2\n"
-               "  movq 56(%0), %%mm3\n"
-               "  movq %%mm0, 32(%1)\n"
-               "  movq %%mm1, 40(%1)\n"
-               "  movq %%mm2, 48(%1)\n"
-               "  movq %%mm3, 56(%1)\n"
-               ".section .fixup, \"ax\"\n"
-               "3: movw $0x05EB, 1b\n" /* jmp on 5 bytes */
-               "   jmp 2b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 1b, 3b\n"
-               ".previous"
-               : : "r" (from), "r" (to) : "memory");
-               from+=64;
-               to+=64;
-       }
-       /*
-        *      Now do the tail of the block
-        */
-       __memcpy(to, from, len&63);
-       kernel_fpu_end();
-       return p;
-}
-
-#ifdef CONFIG_MK7
-
-/*
- *     The K7 has streaming cache bypass load/store. The Cyrix III, K6 and
- *     other MMX using processors do not.
- */
-
-static void fast_clear_page(void *page)
-{
-       int i;
-
-       kernel_fpu_begin();
-       
-       __asm__ __volatile__ (
-               "  pxor %%mm0, %%mm0\n" : :
-       );
-
-       for(i=0;i<4096/64;i++)
-       {
-               __asm__ __volatile__ (
-               "  movntq %%mm0, (%0)\n"
-               "  movntq %%mm0, 8(%0)\n"
-               "  movntq %%mm0, 16(%0)\n"
-               "  movntq %%mm0, 24(%0)\n"
-               "  movntq %%mm0, 32(%0)\n"
-               "  movntq %%mm0, 40(%0)\n"
-               "  movntq %%mm0, 48(%0)\n"
-               "  movntq %%mm0, 56(%0)\n"
-               : : "r" (page) : "memory");
-               page+=64;
-       }
-       /* since movntq is weakly-ordered, a "sfence" is needed to become
-        * ordered again.
-        */
-       __asm__ __volatile__ (
-               "  sfence \n" : :
-       );
-       kernel_fpu_end();
-}
-
-static void fast_copy_page(void *to, void *from)
-{
-       int i;
-
-       kernel_fpu_begin();
-
-       /* maybe the prefetch stuff can go before the expensive fnsave...
-        * but that is for later. -AV
-        */
-       __asm__ __volatile__ (
-               "1: prefetch (%0)\n"
-               "   prefetch 64(%0)\n"
-               "   prefetch 128(%0)\n"
-               "   prefetch 192(%0)\n"
-               "   prefetch 256(%0)\n"
-               "2:  \n"
-               ".section .fixup, \"ax\"\n"
-               "3: movw $0x1AEB, 1b\n" /* jmp on 26 bytes */
-               "   jmp 2b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 1b, 3b\n"
-               ".previous"
-               : : "r" (from) );
-
-       for(i=0; i<(4096-320)/64; i++)
-       {
-               __asm__ __volatile__ (
-               "1: prefetch 320(%0)\n"
-               "2: movq (%0), %%mm0\n"
-               "   movntq %%mm0, (%1)\n"
-               "   movq 8(%0), %%mm1\n"
-               "   movntq %%mm1, 8(%1)\n"
-               "   movq 16(%0), %%mm2\n"
-               "   movntq %%mm2, 16(%1)\n"
-               "   movq 24(%0), %%mm3\n"
-               "   movntq %%mm3, 24(%1)\n"
-               "   movq 32(%0), %%mm4\n"
-               "   movntq %%mm4, 32(%1)\n"
-               "   movq 40(%0), %%mm5\n"
-               "   movntq %%mm5, 40(%1)\n"
-               "   movq 48(%0), %%mm6\n"
-               "   movntq %%mm6, 48(%1)\n"
-               "   movq 56(%0), %%mm7\n"
-               "   movntq %%mm7, 56(%1)\n"
-               ".section .fixup, \"ax\"\n"
-               "3: movw $0x05EB, 1b\n" /* jmp on 5 bytes */
-               "   jmp 2b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 1b, 3b\n"
-               ".previous"
-               : : "r" (from), "r" (to) : "memory");
-               from+=64;
-               to+=64;
-       }
-       for(i=(4096-320)/64; i<4096/64; i++)
-       {
-               __asm__ __volatile__ (
-               "2: movq (%0), %%mm0\n"
-               "   movntq %%mm0, (%1)\n"
-               "   movq 8(%0), %%mm1\n"
-               "   movntq %%mm1, 8(%1)\n"
-               "   movq 16(%0), %%mm2\n"
-               "   movntq %%mm2, 16(%1)\n"
-               "   movq 24(%0), %%mm3\n"
-               "   movntq %%mm3, 24(%1)\n"
-               "   movq 32(%0), %%mm4\n"
-               "   movntq %%mm4, 32(%1)\n"
-               "   movq 40(%0), %%mm5\n"
-               "   movntq %%mm5, 40(%1)\n"
-               "   movq 48(%0), %%mm6\n"
-               "   movntq %%mm6, 48(%1)\n"
-               "   movq 56(%0), %%mm7\n"
-               "   movntq %%mm7, 56(%1)\n"
-               : : "r" (from), "r" (to) : "memory");
-               from+=64;
-               to+=64;
-       }
-       /* since movntq is weakly-ordered, a "sfence" is needed to become
-        * ordered again.
-        */
-       __asm__ __volatile__ (
-               "  sfence \n" : :
-       );
-       kernel_fpu_end();
-}
-
-#else
-
-/*
- *     Generic MMX implementation without K7 specific streaming
- */
-static void fast_clear_page(void *page)
-{
-       int i;
-       
-       kernel_fpu_begin();
-       
-       __asm__ __volatile__ (
-               "  pxor %%mm0, %%mm0\n" : :
-       );
-
-       for(i=0;i<4096/128;i++)
-       {
-               __asm__ __volatile__ (
-               "  movq %%mm0, (%0)\n"
-               "  movq %%mm0, 8(%0)\n"
-               "  movq %%mm0, 16(%0)\n"
-               "  movq %%mm0, 24(%0)\n"
-               "  movq %%mm0, 32(%0)\n"
-               "  movq %%mm0, 40(%0)\n"
-               "  movq %%mm0, 48(%0)\n"
-               "  movq %%mm0, 56(%0)\n"
-               "  movq %%mm0, 64(%0)\n"
-               "  movq %%mm0, 72(%0)\n"
-               "  movq %%mm0, 80(%0)\n"
-               "  movq %%mm0, 88(%0)\n"
-               "  movq %%mm0, 96(%0)\n"
-               "  movq %%mm0, 104(%0)\n"
-               "  movq %%mm0, 112(%0)\n"
-               "  movq %%mm0, 120(%0)\n"
-               : : "r" (page) : "memory");
-               page+=128;
-       }
-
-       kernel_fpu_end();
-}
-
-static void fast_copy_page(void *to, void *from)
-{
-       int i;
-       
-       
-       kernel_fpu_begin();
-
-       __asm__ __volatile__ (
-               "1: prefetch (%0)\n"
-               "   prefetch 64(%0)\n"
-               "   prefetch 128(%0)\n"
-               "   prefetch 192(%0)\n"
-               "   prefetch 256(%0)\n"
-               "2:  \n"
-               ".section .fixup, \"ax\"\n"
-               "3: movw $0x1AEB, 1b\n" /* jmp on 26 bytes */
-               "   jmp 2b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 1b, 3b\n"
-               ".previous"
-               : : "r" (from) );
-
-       for(i=0; i<4096/64; i++)
-       {
-               __asm__ __volatile__ (
-               "1: prefetch 320(%0)\n"
-               "2: movq (%0), %%mm0\n"
-               "   movq 8(%0), %%mm1\n"
-               "   movq 16(%0), %%mm2\n"
-               "   movq 24(%0), %%mm3\n"
-               "   movq %%mm0, (%1)\n"
-               "   movq %%mm1, 8(%1)\n"
-               "   movq %%mm2, 16(%1)\n"
-               "   movq %%mm3, 24(%1)\n"
-               "   movq 32(%0), %%mm0\n"
-               "   movq 40(%0), %%mm1\n"
-               "   movq 48(%0), %%mm2\n"
-               "   movq 56(%0), %%mm3\n"
-               "   movq %%mm0, 32(%1)\n"
-               "   movq %%mm1, 40(%1)\n"
-               "   movq %%mm2, 48(%1)\n"
-               "   movq %%mm3, 56(%1)\n"
-               ".section .fixup, \"ax\"\n"
-               "3: movw $0x05EB, 1b\n" /* jmp on 5 bytes */
-               "   jmp 2b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 1b, 3b\n"
-               ".previous"
-               : : "r" (from), "r" (to) : "memory");
-               from+=64;
-               to+=64;
-       }
-       kernel_fpu_end();
-}
-
-
-#endif
-
-/*
- *     Favour MMX for page clear and copy. 
- */
-
-static void slow_zero_page(void * page)
-{
-       int d0, d1;
-       __asm__ __volatile__( \
-               "cld\n\t" \
-               "rep ; stosl" \
-               : "=&c" (d0), "=&D" (d1)
-               :"a" (0),"1" (page),"0" (1024)
-               :"memory");
-}
-void mmx_clear_page(void * page)
-{
-       if(in_interrupt())
-               slow_zero_page(page);
-       else
-               fast_clear_page(page);
-}
-
-static void slow_copy_page(void *to, void *from)
-{
-       int d0, d1, d2;
-       __asm__ __volatile__( \
-               "cld\n\t" \
-               "rep ; movsl" \
-               : "=&c" (d0), "=&D" (d1), "=&S" (d2) \
-               : "0" (1024),"1" ((long) to),"2" ((long) from) \
-               : "memory");
-}
-  
-
-void mmx_copy_page(void *to, void *from)
-{
-       if(in_interrupt())
-               slow_copy_page(to, from);
-       else
-               fast_copy_page(to, from);
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/old-checksum.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/old-checksum.c
deleted file mode 100644 (file)
index ae3a380..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * FIXME: old compatibility stuff, will be removed soon.
- */
-
-#include <net/checksum.h>
-
-unsigned int csum_partial_copy( const char *src, char *dst, int len, int sum)
-{
-       int src_err=0, dst_err=0;
-
-       sum = csum_partial_copy_generic ( src, dst, len, sum, &src_err, &dst_err);
-
-       if (src_err || dst_err)
-               printk("old csum_partial_copy_fromuser(), tell mingo to convert me.\n");
-
-       return sum;
-}
-
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/strstr.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/strstr.c
deleted file mode 100644 (file)
index a3dafbf..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <linux/string.h>
-
-char * strstr(const char * cs,const char * ct)
-{
-int    d0, d1;
-register char * __res;
-__asm__ __volatile__(
-       "movl %6,%%edi\n\t"
-       "repne\n\t"
-       "scasb\n\t"
-       "notl %%ecx\n\t"
-       "decl %%ecx\n\t"        /* NOTE! This also sets Z if searchstring='' */
-       "movl %%ecx,%%edx\n"
-       "1:\tmovl %6,%%edi\n\t"
-       "movl %%esi,%%eax\n\t"
-       "movl %%edx,%%ecx\n\t"
-       "repe\n\t"
-       "cmpsb\n\t"
-       "je 2f\n\t"             /* also works for empty string, see above */
-       "xchgl %%eax,%%esi\n\t"
-       "incl %%esi\n\t"
-       "cmpb $0,-1(%%eax)\n\t"
-       "jne 1b\n\t"
-       "xorl %%eax,%%eax\n\t"
-       "2:"
-       :"=a" (__res), "=&c" (d0), "=&S" (d1)
-       :"0" (0), "1" (0xffffffff), "2" (cs), "g" (ct)
-       :"dx", "di");
-return __res;
-}
-
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/lib/usercopy.c b/old/xenolinux-2.4.16-sparse/arch/xeno/lib/usercopy.c
deleted file mode 100644 (file)
index d81fa81..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/* 
- * User address space access functions.
- * The non inlined parts of asm-i386/uaccess.h are here.
- *
- * Copyright 1997 Andi Kleen <ak@muc.de>
- * Copyright 1997 Linus Torvalds
- */
-#include <linux/config.h>
-#include <asm/uaccess.h>
-#include <asm/mmx.h>
-
-#ifdef CONFIG_X86_USE_3DNOW_AND_WORKS
-
-unsigned long
-__generic_copy_to_user(void *to, const void *from, unsigned long n)
-{
-       if (access_ok(VERIFY_WRITE, to, n))
-       {
-               if(n<512)
-                       __copy_user(to,from,n);
-               else
-                       mmx_copy_user(to,from,n);
-       }
-       return n;
-}
-
-unsigned long
-__generic_copy_from_user(void *to, const void *from, unsigned long n)
-{
-       if (access_ok(VERIFY_READ, from, n))
-       {
-               if(n<512)
-                       __copy_user_zeroing(to,from,n);
-               else
-                       mmx_copy_user_zeroing(to, from, n);
-       }
-       else
-               memset(to, 0, n);
-       return n;
-}
-
-#else
-
-unsigned long
-__generic_copy_to_user(void *to, const void *from, unsigned long n)
-{
-       prefetch(from);
-       if (access_ok(VERIFY_WRITE, to, n))
-               __copy_user(to,from,n);
-       return n;
-}
-
-unsigned long
-__generic_copy_from_user(void *to, const void *from, unsigned long n)
-{
-       prefetchw(to);
-       if (access_ok(VERIFY_READ, from, n))
-               __copy_user_zeroing(to,from,n);
-       else
-               memset(to, 0, n);
-       return n;
-}
-
-#endif
-
-/*
- * Copy a null terminated string from userspace.
- */
-
-#define __do_strncpy_from_user(dst,src,count,res)                         \
-do {                                                                      \
-       int __d0, __d1, __d2;                                              \
-       __asm__ __volatile__(                                              \
-               "       testl %1,%1\n"                                     \
-               "       jz 2f\n"                                           \
-               "0:     lodsb\n"                                           \
-               "       stosb\n"                                           \
-               "       testb %%al,%%al\n"                                 \
-               "       jz 1f\n"                                           \
-               "       decl %1\n"                                         \
-               "       jnz 0b\n"                                          \
-               "1:     subl %1,%0\n"                                      \
-               "2:\n"                                                     \
-               ".section .fixup,\"ax\"\n"                                 \
-               "3:     movl %5,%0\n"                                      \
-               "       jmp 2b\n"                                          \
-               ".previous\n"                                              \
-               ".section __ex_table,\"a\"\n"                              \
-               "       .align 4\n"                                        \
-               "       .long 0b,3b\n"                                     \
-               ".previous"                                                \
-               : "=d"(res), "=c"(count), "=&a" (__d0), "=&S" (__d1),      \
-                 "=&D" (__d2)                                             \
-               : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), "4"(dst) \
-               : "memory");                                               \
-} while (0)
-
-long
-__strncpy_from_user(char *dst, const char *src, long count)
-{
-       long res;
-       __do_strncpy_from_user(dst, src, count, res);
-       return res;
-}
-
-long
-strncpy_from_user(char *dst, const char *src, long count)
-{
-       long res = -EFAULT;
-       if (access_ok(VERIFY_READ, src, 1))
-               __do_strncpy_from_user(dst, src, count, res);
-       return res;
-}
-
-
-/*
- * Zero Userspace
- */
-
-#define __do_clear_user(addr,size)                                     \
-do {                                                                   \
-       int __d0;                                                       \
-       __asm__ __volatile__(                                           \
-               "0:     rep; stosl\n"                                   \
-               "       movl %2,%0\n"                                   \
-               "1:     rep; stosb\n"                                   \
-               "2:\n"                                                  \
-               ".section .fixup,\"ax\"\n"                              \
-               "3:     lea 0(%2,%0,4),%0\n"                            \
-               "       jmp 2b\n"                                       \
-               ".previous\n"                                           \
-               ".section __ex_table,\"a\"\n"                           \
-               "       .align 4\n"                                     \
-               "       .long 0b,3b\n"                                  \
-               "       .long 1b,2b\n"                                  \
-               ".previous"                                             \
-               : "=&c"(size), "=&D" (__d0)                             \
-               : "r"(size & 3), "0"(size / 4), "1"(addr), "a"(0));     \
-} while (0)
-
-unsigned long
-clear_user(void *to, unsigned long n)
-{
-       if (access_ok(VERIFY_WRITE, to, n))
-               __do_clear_user(to, n);
-       return n;
-}
-
-unsigned long
-__clear_user(void *to, unsigned long n)
-{
-       __do_clear_user(to, n);
-       return n;
-}
-
-/*
- * Return the size of a string (including the ending 0)
- *
- * Return 0 on exception, a value greater than N if too long
- */
-
-long strnlen_user(const char *s, long n)
-{
-       unsigned long mask = -__addr_ok(s);
-       unsigned long res, tmp;
-
-       __asm__ __volatile__(
-               "       testl %0, %0\n"
-               "       jz 3f\n"
-               "       andl %0,%%ecx\n"
-               "0:     repne; scasb\n"
-               "       setne %%al\n"
-               "       subl %%ecx,%0\n"
-               "       addl %0,%%eax\n"
-               "1:\n"
-               ".section .fixup,\"ax\"\n"
-               "2:     xorl %%eax,%%eax\n"
-               "       jmp 1b\n"
-               "3:     movb $1,%%al\n"
-               "       jmp 1b\n"
-               ".previous\n"
-               ".section __ex_table,\"a\"\n"
-               "       .align 4\n"
-               "       .long 0b,2b\n"
-               ".previous"
-               :"=r" (n), "=D" (s), "=a" (res), "=c" (tmp)
-               :"0" (n), "1" (s), "2" (0), "3" (mask)
-               :"cc");
-       return res & mask;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/Makefile b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/Makefile
deleted file mode 100644 (file)
index 2818511..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-O_TARGET := mm.o
-
-obj-y   := init.o fault.o extable.o hypervisor.o get_unmapped_area.o mmu_context.o
-
-include $(TOPDIR)/Rules.make
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/extable.c b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/extable.c
deleted file mode 100644 (file)
index 4cd9f06..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * linux/arch/i386/mm/extable.c
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/spinlock.h>
-#include <asm/uaccess.h>
-
-extern const struct exception_table_entry __start___ex_table[];
-extern const struct exception_table_entry __stop___ex_table[];
-
-static inline unsigned long
-search_one_table(const struct exception_table_entry *first,
-                const struct exception_table_entry *last,
-                unsigned long value)
-{
-        while (first <= last) {
-               const struct exception_table_entry *mid;
-               long diff;
-
-               mid = (last - first) / 2 + first;
-               diff = mid->insn - value;
-                if (diff == 0)
-                        return mid->fixup;
-                else if (diff < 0)
-                        first = mid+1;
-                else
-                        last = mid-1;
-        }
-        return 0;
-}
-
-extern spinlock_t modlist_lock;
-
-unsigned long
-search_exception_table(unsigned long addr)
-{
-       unsigned long ret = 0;
-       
-#ifndef CONFIG_MODULES
-       /* There is only the kernel to search.  */
-       ret = search_one_table(__start___ex_table, __stop___ex_table-1, addr);
-       return ret;
-#else
-       unsigned long flags;
-       /* The kernel is the last "module" -- no need to treat it special.  */
-       struct module *mp;
-
-       spin_lock_irqsave(&modlist_lock, flags);
-       for (mp = module_list; mp != NULL; mp = mp->next) {
-               if (mp->ex_table_start == NULL || !(mp->flags&(MOD_RUNNING|MOD_INITIALIZING)))
-                       continue;
-               ret = search_one_table(mp->ex_table_start,
-                                      mp->ex_table_end - 1, addr);
-               if (ret)
-                       break;
-       }
-       spin_unlock_irqrestore(&modlist_lock, flags);
-       return ret;
-#endif
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/fault.c b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/fault.c
deleted file mode 100644 (file)
index 41d9669..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- *  linux/arch/i386/mm/fault.c
- *
- *  Copyright (C) 1995  Linus Torvalds
- */
-
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/ptrace.h>
-#include <linux/mman.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/interrupt.h>
-#include <linux/init.h>
-#include <linux/tty.h>
-#include <linux/vt_kern.h>             /* For unblank_screen() */
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/hardirq.h>
-
-extern void die(const char *,struct pt_regs *,long);
-
-extern int console_loglevel;
-
-pgd_t *cur_pgd;
-
-/*
- * Ugly, ugly, but the goto's result in better assembly..
- */
-int __verify_write(const void * addr, unsigned long size)
-{
-       struct vm_area_struct * vma;
-       unsigned long start = (unsigned long) addr;
-
-       if (!size)
-               return 1;
-
-       vma = find_vma(current->mm, start);
-       if (!vma)
-               goto bad_area;
-       if (vma->vm_start > start)
-               goto check_stack;
-
-good_area:
-       if (!(vma->vm_flags & VM_WRITE))
-               goto bad_area;
-       size--;
-       size += start & ~PAGE_MASK;
-       size >>= PAGE_SHIFT;
-       start &= PAGE_MASK;
-
-       for (;;) {
-       survive:
-               {
-                       int fault = handle_mm_fault(current->mm, vma, start, 1);
-                       if (!fault)
-                               goto bad_area;
-                       if (fault < 0)
-                               goto out_of_memory;
-               }
-               if (!size)
-                       break;
-               size--;
-               start += PAGE_SIZE;
-               if (start < vma->vm_end)
-                       continue;
-               vma = vma->vm_next;
-               if (!vma || vma->vm_start != start)
-                       goto bad_area;
-               if (!(vma->vm_flags & VM_WRITE))
-                       goto bad_area;;
-       }
-       return 1;
-
-check_stack:
-       if (!(vma->vm_flags & VM_GROWSDOWN))
-               goto bad_area;
-       if (expand_stack(vma, start) == 0)
-               goto good_area;
-
-bad_area:
-       return 0;
-
-out_of_memory:
-       if (current->pid == 1) {
-               current->policy |= SCHED_YIELD;
-               schedule();
-               goto survive;
-       }
-       goto bad_area;
-}
-
-extern spinlock_t timerlist_lock;
-
-/*
- * Unlock any spinlocks which will prevent us from getting the
- * message out (timerlist_lock is acquired through the
- * console unblank code)
- */
-void bust_spinlocks(int yes)
-{
-       spin_lock_init(&timerlist_lock);
-       if (yes) {
-               oops_in_progress = 1;
-       } else {
-               int loglevel_save = console_loglevel;
-#ifdef CONFIG_VT
-               unblank_screen();
-#endif
-               oops_in_progress = 0;
-               /*
-                * OK, the message is on the console.  Now we call printk()
-                * without oops_in_progress set so that printk will give klogd
-                * a poke.  Hold onto your hats...
-                */
-               console_loglevel = 15;          /* NMI oopser may have shut the console up */
-               printk(" ");
-               console_loglevel = loglevel_save;
-       }
-}
-
-void do_BUG(const char *file, int line)
-{
-       bust_spinlocks(1);
-       printk("kernel BUG at %s:%d!\n", file, line);
-}
-
-/*
- * This routine handles page faults.  It determines the address,
- * and the problem, and then passes it off to one of the appropriate
- * routines.
- *
- * error_code:
- *     bit 0 == 0 means no page found, 1 means protection fault
- *     bit 1 == 0 means read, 1 means write
- *     bit 2 == 0 means kernel, 1 means user-mode
- */
-asmlinkage void do_page_fault(struct pt_regs *regs, 
-                              unsigned long error_code,
-                              unsigned long address)
-{
-       struct task_struct *tsk = current;
-       struct mm_struct *mm;
-       struct vm_area_struct * vma;
-        unsigned long page;
-       unsigned long fixup;
-       int write;
-       siginfo_t info;
-
-        /* Set the "privileged fault" bit to something sane. */
-        error_code &= 3;
-        error_code |= (regs->xcs & 2) << 1;
-
-#if PT_UPDATE_DEBUG > 0
-        if ( (error_code == 0) && (address >= TASK_SIZE) )
-        {
-            unsigned long paddr = __pa(address);
-            int i;
-            for ( i = 0; i < pt_update_queue_idx; i++ )
-            {
-                if ( update_debug_queue[i].ptr == paddr )
-                {
-                    printk("XXX now(EIP=%08lx:ptr=%08lx) "
-                           "then(%s/%d:p/v=%08lx/%08lx)\n",
-                           regs->eip, address,
-                           update_debug_queue[i].file,
-                           update_debug_queue[i].line,
-                           update_debug_queue[i].ptr,
-                           update_debug_queue[i].val);
-                }
-            }
-        }
-#endif
-
-        if ( flush_page_update_queue() != 0 ) return;
-
-       /*
-        * We fault-in kernel-space virtual memory on-demand. The
-        * 'reference' page table is init_mm.pgd.
-        *
-        * NOTE! We MUST NOT take any locks for this case. We may
-        * be in an interrupt or a critical region, and should
-        * only copy the information from the master page table,
-        * nothing more.
-        *
-        * This verifies that the fault happens in kernel space
-        * (error_code & 4) == 0, and that the fault was not a
-        * protection error (error_code & 1) == 0.
-        */
-       if (address >= TASK_SIZE && !(error_code & 5))
-               goto vmalloc_fault;
-
-       mm = tsk->mm;
-       info.si_code = SEGV_MAPERR;
-
-       /*
-        * If we're in an interrupt or have no user
-        * context, we must not take the fault..
-        */
-       if (in_interrupt() || !mm)
-               goto no_context;
-
-       down_read(&mm->mmap_sem);
-
-       vma = find_vma(mm, address);
-       if (!vma)
-               goto bad_area;
-       if (vma->vm_start <= address)
-               goto good_area;
-       if (!(vma->vm_flags & VM_GROWSDOWN))
-               goto bad_area;
-       if (error_code & 4) {
-               /*
-                * accessing the stack below %esp is always a bug.
-                * The "+ 32" is there due to some instructions (like
-                * pusha) doing post-decrement on the stack and that
-                * doesn't show up until later..
-                */
-               if (address + 32 < regs->esp)
-                       goto bad_area;
-       }
-       if (expand_stack(vma, address))
-               goto bad_area;
-/*
- * Ok, we have a good vm_area for this memory access, so
- * we can handle it..
- */
-good_area:
-       info.si_code = SEGV_ACCERR;
-       write = 0;
-       switch (error_code & 3) {
-               default:        /* 3: write, present */
-                       /* fall through */
-               case 2:         /* write, not present */
-                       if (!(vma->vm_flags & VM_WRITE))
-                               goto bad_area;
-                       write++;
-                       break;
-               case 1:         /* read, present */
-                       goto bad_area;
-               case 0:         /* read, not present */
-                       if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
-                               goto bad_area;
-       }
-
- survive:
-       /*
-        * If for any reason at all we couldn't handle the fault,
-        * make sure we exit gracefully rather than endlessly redo
-        * the fault.
-        */
-       switch (handle_mm_fault(mm, vma, address, write)) {
-       case 1:
-               tsk->min_flt++;
-               break;
-       case 2:
-               tsk->maj_flt++;
-               break;
-       case 0:
-               goto do_sigbus;
-       default:
-               goto out_of_memory;
-       }
-
-       up_read(&mm->mmap_sem);
-       return;
-
-/*
- * Something tried to access memory that isn't in our memory map..
- * Fix it, but check if it's kernel or user first..
- */
-bad_area:
-       up_read(&mm->mmap_sem);
-
-       /* User mode accesses just cause a SIGSEGV */
-       if (error_code & 4) {
-               tsk->thread.cr2 = address;
-               tsk->thread.error_code = error_code;
-               tsk->thread.trap_no = 14;
-               info.si_signo = SIGSEGV;
-               info.si_errno = 0;
-               /* info.si_code has been set above */
-               info.si_addr = (void *)address;
-               force_sig_info(SIGSEGV, &info, tsk);
-               return;
-       }
-
-no_context:
-       /* Are we prepared to handle this kernel fault?  */
-       if ((fixup = search_exception_table(regs->eip)) != 0) {
-               regs->eip = fixup;
-               return;
-       }
-
-/*
- * Oops. The kernel tried to access some bad page. We'll have to
- * terminate things with extreme prejudice.
- */
-
-       bust_spinlocks(1);
-
-       if (address < PAGE_SIZE)
-               printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
-       else
-               printk(KERN_ALERT "Unable to handle kernel paging request");
-       printk(" at virtual address %08lx\n",address);
-       printk(" printing eip:\n");
-       printk("%08lx\n", regs->eip);
-        page = ((unsigned long *) cur_pgd)[address >> 22];
-        printk(KERN_ALERT "*pde=%08lx(%08lx)\n", page, machine_to_phys(page));
-        if (page & 1) {
-                page &= PAGE_MASK;
-                address &= 0x003ff000;
-                page = machine_to_phys(page);
-                page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];
-                printk(KERN_ALERT "*pte=%08lx(%08lx)\n", page, 
-                       machine_to_phys(page));
-        }
-       die("Oops", regs, error_code);
-       bust_spinlocks(0);
-       do_exit(SIGKILL);
-
-/*
- * We ran out of memory, or some other thing happened to us that made
- * us unable to handle the page fault gracefully.
- */
-out_of_memory:
-       up_read(&mm->mmap_sem);
-       if (tsk->pid == 1) {
-               tsk->policy |= SCHED_YIELD;
-               schedule();
-               down_read(&mm->mmap_sem);
-               goto survive;
-       }
-       printk("VM: killing process %s\n", tsk->comm);
-       if (error_code & 4)
-               do_exit(SIGKILL);
-       goto no_context;
-
-do_sigbus:
-       up_read(&mm->mmap_sem);
-
-       /*
-        * Send a sigbus, regardless of whether we were in kernel
-        * or user mode.
-        */
-       tsk->thread.cr2 = address;
-       tsk->thread.error_code = error_code;
-       tsk->thread.trap_no = 14;
-       info.si_signo = SIGBUS;
-       info.si_errno = 0;
-       info.si_code = BUS_ADRERR;
-       info.si_addr = (void *)address;
-       force_sig_info(SIGBUS, &info, tsk);
-
-       /* Kernel mode? Handle exceptions or die */
-       if (!(error_code & 4))
-               goto no_context;
-       return;
-
-vmalloc_fault:
-       {
-               /*
-                * Synchronize this task's top level page-table
-                * with the 'reference' page table.
-                *
-                * Do _not_ use "tsk" here. We might be inside
-                * an interrupt in the middle of a task switch..
-                */
-               int offset = __pgd_offset(address);
-               pgd_t *pgd, *pgd_k;
-               pmd_t *pmd, *pmd_k;
-               pte_t *pte_k;
-
-               pgd = offset + cur_pgd;
-               pgd_k = init_mm.pgd + offset;
-
-               if (!pgd_present(*pgd_k))
-                       goto no_context;
-               set_pgd(pgd, *pgd_k);
-               
-               pmd = pmd_offset(pgd, address);
-               pmd_k = pmd_offset(pgd_k, address);
-               if (!pmd_present(*pmd_k))
-                       goto no_context;
-               set_pmd(pmd, *pmd_k);
-                XENO_flush_page_update_queue(); /* flush PMD update */
-
-               pte_k = pte_offset(pmd_k, address);
-               if (!pte_present(*pte_k))
-                       goto no_context;
-               return;
-       }
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/get_unmapped_area.c b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/get_unmapped_area.c
deleted file mode 100644 (file)
index a7b4447..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-
-#include <linux/slab.h>
-#include <linux/shm.h>
-#include <linux/mman.h>
-#include <linux/pagemap.h>
-#include <linux/swap.h>
-#include <linux/swapctl.h>
-#include <linux/smp_lock.h>
-#include <linux/init.h>
-#include <linux/file.h>
-#include <linux/fs.h>
-#include <linux/personality.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-
-/*
-static int direct_mapped(unsigned long addr)
-{
-    direct_mmap_node_t * node;
-    struct list_head * curr;
-    struct list_head * direct_list = &current->mm->context.direct_list;
-
-    curr = direct_list->next;
-    while(curr != direct_list){
-        node = list_entry(curr, direct_mmap_node_t, list);
-        if(node->addr == addr)
-            break;
-        curr = curr->next;
-    } 
-
-    if(curr == direct_list)
-        return 0;
-
-    return 1;
-}
-*/
-/*
-unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)
-{
-       struct vm_area_struct *vma;
-
-       if (len > TASK_SIZE)
-               return -ENOMEM;
-
-       if (addr) {
-               addr = PAGE_ALIGN(addr);
-               vma = find_vma(current->mm, addr);
-               if (TASK_SIZE - len >= addr &&
-                   (!vma || addr + len <= vma->vm_start))
-                       return addr;
-       }
-       addr = PAGE_ALIGN(TASK_UNMAPPED_BASE);
-
-       for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) {
-               if (TASK_SIZE - len < addr)
-                       return -ENOMEM;
-        
-               if ((!vma || addr + len <= vma->vm_start) && !direct_mapped(addr))
-                       return addr;
-               
-        addr = vma->vm_end;
-       }
-}
-*/
-struct list_head *find_direct(struct list_head *list, unsigned long addr)
-{
-       struct list_head * curr;
-       struct list_head * direct_list = &current->mm->context.direct_list;
-       direct_mmap_node_t * node;
-
-    for ( curr = direct_list->next; curr != direct_list; curr = curr->next )
-    {
-        node = list_entry(curr, direct_mmap_node_t, list);
-        if ( node->vm_start >= addr ) break;
-    }
-
-    return curr;
-}
-
-unsigned long arch_get_unmapped_area(struct file *filp, unsigned long
-addr, unsigned long len, unsigned long pgoff, unsigned long flags)
-{
-    struct vm_area_struct *vma;
-    direct_mmap_node_t * node;
-    struct list_head * curr;
-    struct list_head * direct_list = &current->mm->context.direct_list;
-
-    if (len > TASK_SIZE)
-        return -ENOMEM;
-
-    if ( addr )
-    {
-        addr = PAGE_ALIGN(addr);
-        vma = find_vma(current->mm, addr);
-        curr = find_direct(direct_list, addr);
-        node = list_entry(curr, direct_mmap_node_t, list);
-        if ( (TASK_SIZE - len >= addr) &&
-             (!vma || addr + len <= vma->vm_start) &&
-             ((curr == direct_list) || addr + len <= node->vm_start) )
-            return addr;
-    }
-
-    addr = PAGE_ALIGN(TASK_UNMAPPED_BASE);
-
-
-    /* Find first VMA and direct_map nodes with vm_start > addr */
-    vma  = find_vma(current->mm, addr);
-    curr = find_direct(direct_list, addr);
-    node = list_entry(curr, direct_mmap_node_t, list);
-
-    for ( ; ; )
-    {
-        if ( TASK_SIZE - len < addr ) return -ENOMEM;
-
-        if ( vma && ((curr == direct_list) || (vma->vm_start < node->vm_start)))
-        {
-            /* Do we fit before VMA node? */
-            if ( addr + len <= vma->vm_start ) return addr;
-            addr = vma->vm_end;
-            vma = vma->vm_next;
-        }
-        else if ( curr != direct_list )
-        {
-            /* Do we fit before direct_map node? */
-            if ( addr + len <= node->vm_start) return addr;
-            addr = node->vm_end;
-            curr = curr->next;
-            node = list_entry(curr, direct_mmap_node_t, list);
-        }
-        else
-        {
-            /* !vma && curr == direct_list */
-            return addr;
-        }
-    }
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/hypervisor.c b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/hypervisor.c
deleted file mode 100644 (file)
index b051684..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/******************************************************************************
- * xeno/mm/hypervisor.c
- * 
- * Update page tables via the hypervisor.
- * 
- * Copyright (c) 2002, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <asm/hypervisor.h>
-#include <asm/page.h>
-#include <asm/pgtable.h>
-
-#define QUEUE_SIZE 2048
-static page_update_request_t update_queue[QUEUE_SIZE];
-unsigned int pt_update_queue_idx = 0;
-#define idx pt_update_queue_idx
-
-#if PT_UPDATE_DEBUG > 0
-page_update_debug_t update_debug_queue[QUEUE_SIZE] = {{0}};
-#undef queue_l1_entry_update
-#undef queue_l2_entry_update
-static void DEBUG_allow_pt_reads(void)
-{
-    pte_t *pte;
-    page_update_request_t update;
-    int i;
-    for ( i = idx-1; i >= 0; i-- )
-    {
-        pte = update_debug_queue[i].ptep;
-        if ( pte == NULL ) continue;
-        update_debug_queue[i].ptep = NULL;
-        update.ptr = phys_to_machine(__pa(pte));
-        update.val = update_debug_queue[i].pteval;
-        HYPERVISOR_pt_update(&update, 1);
-    }
-}
-static void DEBUG_disallow_pt_read(unsigned long pa)
-{
-    pte_t *pte;
-    pmd_t *pmd;
-    pgd_t *pgd;
-    unsigned long pteval;
-    /*
-     * We may fault because of an already outstanding update.
-     * That's okay -- it'll get fixed up in the fault handler.
-     */
-    page_update_request_t update;
-    unsigned long va = (unsigned long)__va(pa);
-    pgd = pgd_offset_k(va);
-    pmd = pmd_offset(pgd, va);
-    pte = pte_offset(pmd, va);
-    update.ptr = phys_to_machine(__pa(pte));
-    pteval = *(unsigned long *)pte;
-    update.val = pteval & ~_PAGE_PRESENT;
-    HYPERVISOR_pt_update(&update, 1);
-    update_debug_queue[idx].ptep = pte;
-    update_debug_queue[idx].pteval = pteval;
-}
-#endif
-
-#if PT_UPDATE_DEBUG > 1
-#undef queue_pt_switch
-#undef queue_tlb_flush
-#undef queue_invlpg
-#undef queue_pgd_pin
-#undef queue_pgd_unpin
-#undef queue_pte_pin
-#undef queue_pte_unpin
-#endif
-
-
-/*
- * This is the current pagetable base pointer, which is updated
- * on context switch.
- */
-unsigned long pt_baseptr;
-
-void _flush_page_update_queue(void)
-{
-    if ( idx == 0 ) return;
-#if PT_UPDATE_DEBUG > 1
-    printk("Flushing %d entries from pt update queue\n", idx);
-#endif
-#if PT_UPDATE_DEBUG > 0
-    DEBUG_allow_pt_reads();
-#endif
-    HYPERVISOR_pt_update(update_queue, idx);
-    idx = 0;
-}
-
-static void increment_index(void)
-{
-    if ( ++idx == QUEUE_SIZE ) _flush_page_update_queue();
-}
-
-void queue_l1_entry_update(unsigned long ptr, unsigned long val)
-{
-#if PT_UPDATE_DEBUG > 0
-    DEBUG_disallow_pt_read(ptr);
-#endif
-    update_queue[idx].ptr = phys_to_machine(ptr);
-    update_queue[idx].val = val;
-    increment_index();
-}
-
-void queue_l2_entry_update(unsigned long ptr, unsigned long val)
-{
-    update_queue[idx].ptr = phys_to_machine(ptr);
-    update_queue[idx].val = val;
-    increment_index();
-}
-
-void queue_pt_switch(unsigned long ptr)
-{
-    update_queue[idx].ptr  = phys_to_machine(ptr);
-    update_queue[idx].ptr |= PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = PGEXT_NEW_BASEPTR;
-    increment_index();
-}
-
-void queue_tlb_flush(void)
-{
-    update_queue[idx].ptr  = PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = PGEXT_TLB_FLUSH;
-    increment_index();
-}
-
-void queue_invlpg(unsigned long ptr)
-{
-    update_queue[idx].ptr  = PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = ptr & PAGE_MASK;
-    update_queue[idx].val |= PGEXT_INVLPG;
-    increment_index();
-}
-
-void queue_pgd_pin(unsigned long ptr)
-{
-    update_queue[idx].ptr  = phys_to_machine(ptr);
-    update_queue[idx].ptr |= PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = PGEXT_PIN_L2_TABLE;
-    increment_index();
-}
-
-void queue_pgd_unpin(unsigned long ptr)
-{
-    update_queue[idx].ptr  = phys_to_machine(ptr);
-    update_queue[idx].ptr |= PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = PGEXT_UNPIN_TABLE;
-    increment_index();
-}
-
-void queue_pte_pin(unsigned long ptr)
-{
-    update_queue[idx].ptr  = phys_to_machine(ptr);
-    update_queue[idx].ptr |= PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = PGEXT_PIN_L1_TABLE;
-    increment_index();
-}
-
-void queue_pte_unpin(unsigned long ptr)
-{
-    update_queue[idx].ptr  = phys_to_machine(ptr);
-    update_queue[idx].ptr |= PGREQ_EXTENDED_COMMAND;
-    update_queue[idx].val  = PGEXT_UNPIN_TABLE;
-    increment_index();
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c
deleted file mode 100644 (file)
index 71b22dd..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- *  linux/arch/i386/mm/init.c
- *
- *  Copyright (C) 1995  Linus Torvalds
- *
- *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
- */
-
-#include <linux/config.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/ptrace.h>
-#include <linux/mman.h>
-#include <linux/mm.h>
-#include <linux/swap.h>
-#include <linux/smp.h>
-#include <linux/init.h>
-#ifdef CONFIG_BLK_DEV_INITRD
-#include <linux/blk.h>
-#endif
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-#include <linux/bootmem.h>
-
-#include <asm/processor.h>
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/pgalloc.h>
-#include <asm/dma.h>
-#include <asm/apic.h>
-#include <asm/tlb.h>
-
-mmu_gather_t mmu_gathers[NR_CPUS];
-unsigned long highstart_pfn, highend_pfn;
-static unsigned long totalram_pages;
-static unsigned long totalhigh_pages;
-
-int do_check_pgt_cache(int low, int high)
-{
-    int freed = 0;
-    if(pgtable_cache_size > high) {
-        do {
-            if (!QUICKLIST_EMPTY(pgd_quicklist)) {
-                free_pgd_slow(get_pgd_fast());
-                freed++;
-            }
-            if (!QUICKLIST_EMPTY(pte_quicklist)) {
-                pte_free_slow(pte_alloc_one_fast(NULL, 0));
-                freed++;
-            }
-        } while(pgtable_cache_size > low);
-    }
-    return freed;
-}
-
-void show_mem(void)
-{
-    int i, total = 0, reserved = 0;
-    int shared = 0, cached = 0;
-    int highmem = 0;
-
-    printk("Mem-info:\n");
-    show_free_areas();
-    printk("Free swap:       %6dkB\n",nr_swap_pages<<(PAGE_SHIFT-10));
-    i = max_mapnr;
-    while (i-- > 0) {
-        total++;
-        if (PageHighMem(mem_map+i))
-            highmem++;
-        if (PageReserved(mem_map+i))
-            reserved++;
-        else if (PageSwapCache(mem_map+i))
-            cached++;
-        else if (page_count(mem_map+i))
-            shared += page_count(mem_map+i) - 1;
-    }
-    printk("%d pages of RAM\n", total);
-    printk("%d pages of HIGHMEM\n",highmem);
-    printk("%d reserved pages\n",reserved);
-    printk("%d pages shared\n",shared);
-    printk("%d pages swap cached\n",cached);
-    printk("%ld pages in page table cache\n",pgtable_cache_size);
-    show_buffers();
-}
-
-/* References to section boundaries */
-
-extern char _text, _etext, _edata, __bss_start, _end;
-extern char __init_begin, __init_end;
-
-static inline void set_pte_phys (unsigned long vaddr,
-                                 unsigned long phys, pgprot_t flags)
-{
-    pgprot_t prot;
-    pgd_t *pgd;
-    pmd_t *pmd;
-    pte_t *pte;
-
-    pgd = init_mm.pgd + __pgd_offset(vaddr);
-    if (pgd_none(*pgd)) {
-        printk("PAE BUG #00!\n");
-        return;
-    }
-    pmd = pmd_offset(pgd, vaddr);
-    if (pmd_none(*pmd)) {
-        printk("PAE BUG #01!\n");
-        return;
-    }
-    pte = pte_offset(pmd, vaddr);
-    if (pte_val(*pte))
-        pte_ERROR(*pte);
-    pgprot_val(prot) = pgprot_val(PAGE_KERNEL) | pgprot_val(flags);
-
-    /* We queue directly, avoiding hidden phys->machine translation. */
-    queue_l1_entry_update(__pa(pte), phys | pgprot_val(prot));
-
-    /*
-     * It's enough to flush this one mapping.
-     * (PGE mappings get flushed as well)
-     */
-    __flush_tlb_one(vaddr);
-}
-
-void __set_fixmap (enum fixed_addresses idx, unsigned long phys, 
-                   pgprot_t flags)
-{
-    unsigned long address = __fix_to_virt(idx);
-
-    if (idx >= __end_of_fixed_addresses) {
-        printk("Invalid __set_fixmap\n");
-        return;
-    }
-    set_pte_phys(address, phys, flags);
-}
-
-static void __init fixrange_init (unsigned long start, 
-                                  unsigned long end, pgd_t *pgd_base)
-{
-    pgd_t *pgd, *kpgd;
-    pmd_t *pmd, *kpmd;
-    pte_t *pte, *kpte;
-    int i, j;
-    unsigned long vaddr;
-
-    vaddr = start;
-    i = __pgd_offset(vaddr);
-    j = __pmd_offset(vaddr);
-    pgd = pgd_base + i;
-
-    for ( ; (i < PTRS_PER_PGD) && (vaddr != end); pgd++, i++) {
-        pmd = (pmd_t *)pgd;
-        for (; (j < PTRS_PER_PMD) && (vaddr != end); pmd++, j++) {
-            if (pmd_none(*pmd)) {
-                pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
-                clear_page(pte);
-                kpgd = pgd_offset_k((unsigned long)pte);
-                kpmd = pmd_offset(kpgd, (unsigned long)pte);
-                kpte = pte_offset(kpmd, (unsigned long)pte);                
-                queue_l1_entry_update(__pa(kpte), 
-                                      (*(unsigned long *)kpte)&~_PAGE_RW);
-                set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)));
-            }
-            vaddr += PMD_SIZE;
-        }
-        j = 0;
-    }
-
-    XENO_flush_page_update_queue();
-}
-
-void __init paging_init(void)
-{
-    unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
-    unsigned int max_dma, high, low;
-    unsigned long vaddr;
-    
-    max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
-    low = max_low_pfn;
-    high = highend_pfn;
-    
-    if (low < max_dma)
-    {
-        zones_size[ZONE_DMA] = low;
-    }
-    else 
-    {
-        zones_size[ZONE_DMA] = max_dma;
-        zones_size[ZONE_NORMAL] = low - max_dma;
-    }
-    free_area_init(zones_size);
-
-    /*
-     * Fixed mappings, only the page table structure has to be created - 
-     * mappings will be set by set_fixmap():
-     */
-    vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
-    fixrange_init(vaddr, HYPERVISOR_VIRT_START, init_mm.pgd);
-
-    /*
-     * XXX We do this conversion early, so that all other page tables
-     * will automatically get this mapping.
-     */
-    set_fixmap(FIX_BLKRING_BASE, start_info.blk_ring);
-}
-
-
-static inline int page_is_ram (unsigned long pagenr)
-{
-    return 1;
-}
-
-void __init mem_init(void)
-{
-    int codesize, reservedpages, datasize, initsize;
-    int tmp;
-
-    max_mapnr = num_physpages = max_low_pfn;
-    high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
-
-    /* clear the zero-page */
-    memset(empty_zero_page, 0, PAGE_SIZE);
-
-    /* this will put all low memory onto the freelists */
-    totalram_pages += free_all_bootmem();
-
-    reservedpages = 0;
-    for (tmp = 0; tmp < max_low_pfn; tmp++)
-        /*
-         * Only count reserved RAM pages
-         */
-        if (page_is_ram(tmp) && PageReserved(mem_map+tmp))
-            reservedpages++;
-    codesize =  (unsigned long) &_etext - (unsigned long) &_text;
-    datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
-    initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
-
-    printk("Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, %dk init, %ldk highmem)\n",
-           (unsigned long) nr_free_pages() << (PAGE_SHIFT-10),
-           max_mapnr << (PAGE_SHIFT-10),
-           codesize >> 10,
-           reservedpages << (PAGE_SHIFT-10),
-           datasize >> 10,
-           initsize >> 10,
-           (unsigned long) (totalhigh_pages << (PAGE_SHIFT-10))
-        );
-
-    boot_cpu_data.wp_works_ok = 1;
-}
-
-void free_initmem(void)
-{
-    unsigned long addr;
-
-    addr = (unsigned long)(&__init_begin);
-    for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
-        ClearPageReserved(virt_to_page(addr));
-        set_page_count(virt_to_page(addr), 1);
-        free_page(addr);
-        totalram_pages++;
-    }
-    printk ("Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10);
-}
-
-#ifdef CONFIG_BLK_DEV_INITRD
-void free_initrd_mem(unsigned long start, unsigned long end)
-{
-    if (start < end)
-        printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
-    for (; start < end; start += PAGE_SIZE) {
-        ClearPageReserved(virt_to_page(start));
-        set_page_count(virt_to_page(start), 1);
-        free_page(start);
-        totalram_pages++;
-    }
-}
-#endif
-
-void si_meminfo(struct sysinfo *val)
-{
-    val->totalram = totalram_pages;
-    val->sharedram = 0;
-    val->freeram = nr_free_pages();
-    val->bufferram = atomic_read(&buffermem_pages);
-    val->totalhigh = totalhigh_pages;
-    val->freehigh = nr_free_highpages();
-    val->mem_unit = PAGE_SIZE;
-    return;
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/mm/mmu_context.c b/old/xenolinux-2.4.16-sparse/arch/xeno/mm/mmu_context.c
deleted file mode 100644 (file)
index b8f41fb..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#include <linux/slab.h>
-#include <linux/list.h>
-
-int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
-{
-    INIT_LIST_HEAD(&mm->context.direct_list);
-    return 0;
-}
-
-/* just free all elements of list identifying directly mapped areas */
-void destroy_context(struct mm_struct *mm)
-{
-    direct_mmap_node_t * node;
-    struct list_head * curr;
-    struct list_head * direct_list = &mm->context.direct_list;
-
-    curr = direct_list->next;
-    while(curr != direct_list){
-        node = list_entry(curr, direct_mmap_node_t, list);
-        curr = curr->next;
-        list_del(&node->list);
-        kfree(node);
-   }
-
-}
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/vmlinux.lds b/old/xenolinux-2.4.16-sparse/arch/xeno/vmlinux.lds
deleted file mode 100644 (file)
index 26a59aa..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* ld script to make i386 Linux kernel
- * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
- */
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
-SECTIONS
-{
-  . = 0xC0000000 + 0x000000;
-  _text = .;                   /* Text and read-only data */
-  .text : {
-       *(.text)
-       *(.fixup)
-       *(.gnu.warning)
-       } = 0x9090
-  .text.lock : { *(.text.lock) }       /* out-of-line lock text */
-
-  _etext = .;                  /* End of text section */
-
-  .rodata : { *(.rodata) *(.rodata.*) }
-  .kstrtab : { *(.kstrtab) }
-
-  . = ALIGN(16);               /* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
-  __start___ksymtab = .;       /* Kernel symbol table */
-  __ksymtab : { *(__ksymtab) }
-  __stop___ksymtab = .;
-
-  __start___kallsyms = .;      /* All kernel symbols */
-  __kallsyms : { *(__kallsyms) }
-  __stop___kallsyms = .;
-
-  .data : {                    /* Data */
-       *(.data)
-       CONSTRUCTORS
-       }
-
-  _edata = .;                  /* End of data section */
-
-  . = ALIGN(8192);             /* init_task */
-  .data.init_task : { *(.data.init_task) }
-
-  . = ALIGN(4096);             /* Init code and data */
-  __init_begin = .;
-  .text.init : { *(.text.init) }
-  .data.init : { *(.data.init) }
-  . = ALIGN(16);
-  __setup_start = .;
-  .setup.init : { *(.setup.init) }
-  __setup_end = .;
-  __initcall_start = .;
-  .initcall.init : { *(.initcall.init) }
-  __initcall_end = .;
-  . = ALIGN(4096);
-  __init_end = .;
-
-  . = ALIGN(4096);
-  .data.page_aligned : { *(.data.idt) }
-
-  . = ALIGN(32);
-  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-
-  __bss_start = .;             /* BSS */
-  .bss : {
-       *(.bss)
-       }
-  _end = . ;
-
-  /* Sections to be discarded */
-  /DISCARD/ : {
-       *(.text.exit)
-       *(.data.exit)
-       *(.exitcall.exit)
-       }
-
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment 0 : { *(.comment) }
-}
diff --git a/old/xenolinux-2.4.16-sparse/drivers/block/Config.in b/old/xenolinux-2.4.16-sparse/drivers/block/Config.in
deleted file mode 100644 (file)
index 716774f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Block device driver configuration
-#
-mainmenu_option next_comment
-comment 'Block devices'
-
-tristate 'Normal PC floppy disk support' CONFIG_BLK_DEV_FD
-if [ "$CONFIG_AMIGA" = "y" ]; then
-   tristate 'Amiga floppy support' CONFIG_AMIGA_FLOPPY
-fi
-if [ "$CONFIG_ATARI" = "y" ]; then
-   tristate 'Atari floppy support' CONFIG_ATARI_FLOPPY
-fi
-if [ "$CONFIG_MAC" = "y" ]; then
-   dep_bool 'Macintosh IIfx/Quadra 900/Quadra 950 floppy support (EXPERIMENTAL)' CONFIG_BLK_DEV_SWIM_IOP $CONFIG_EXPERIMENTAL
-fi
-if [ "$CONFIG_MCA" = "y" ]; then
-   tristate 'PS/2 ESDI hard disk support' CONFIG_BLK_DEV_PS2
-fi
-if [ "$CONFIG_ZORRO" = "y" ]; then
-   tristate 'Amiga Zorro II ramdisk support' CONFIG_AMIGA_Z2RAM
-fi
-if [ "$CONFIG_ATARI" = "y" ]; then
-   tristate 'Atari ACSI support' CONFIG_ATARI_ACSI
-   if [ "$CONFIG_ATARI_ACSI" != "n" ]; then
-      comment 'Some devices (e.g. CD jukebox) support multiple LUNs'
-      bool '  Probe all LUNs on each ACSI device' CONFIG_ACSI_MULTI_LUN
-      tristate '  Atari SLM laser printer support' CONFIG_ATARI_SLM
-   fi
-fi
-dep_tristate 'XT hard disk support' CONFIG_BLK_DEV_XD $CONFIG_ISA
-dep_tristate 'Parallel port IDE device support' CONFIG_PARIDE $CONFIG_PARPORT
-if [ "$CONFIG_PARIDE" = "y" -o "$CONFIG_PARIDE" = "m" ]; then
-   source drivers/block/paride/Config.in
-fi
-dep_tristate 'Compaq SMART2 support' CONFIG_BLK_CPQ_DA $CONFIG_PCI
-dep_tristate 'Compaq Smart Array 5xxx support' CONFIG_BLK_CPQ_CISS_DA $CONFIG_PCI 
-dep_tristate 'Mylex DAC960/DAC1100 PCI RAID Controller support' CONFIG_BLK_DEV_DAC960 $CONFIG_PCI
-
-tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
-dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
-
-tristate 'RAM disk support' CONFIG_BLK_DEV_RAM
-if [ "$CONFIG_BLK_DEV_RAM" = "y" -o "$CONFIG_BLK_DEV_RAM" = "m" ]; then
-   int '  Default RAM disk size' CONFIG_BLK_DEV_RAM_SIZE 4096
-fi
-dep_bool '  Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD $CONFIG_BLK_DEV_RAM
-
-bool 'XenoLinux virtual block device support' CONFIG_XENOLINUX_BLOCK
-
-endmenu
diff --git a/old/xenolinux-2.4.16-sparse/drivers/block/ll_rw_blk.c b/old/xenolinux-2.4.16-sparse/drivers/block/ll_rw_blk.c
deleted file mode 100644 (file)
index cd1cb7c..0000000
+++ /dev/null
@@ -1,1251 +0,0 @@
-/*
- *  linux/drivers/block/ll_rw_blk.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- * Copyright (C) 1994,      Karl Keyte: Added support for disk statistics
- * Elevator latency, (C) 2000  Andrea Arcangeli <andrea@suse.de> SuSE
- * Queue request tables / lock, selectable elevator, Jens Axboe <axboe@suse.de>
- * kernel-doc documentation started by NeilBrown <neilb@cse.unsw.edu.au> -  July2000
- */
-
-/*
- * This handles all read/write requests to block devices
- */
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/kernel_stat.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/config.h>
-#include <linux/locks.h>
-#include <linux/mm.h>
-#include <linux/swap.h>
-#include <linux/init.h>
-#include <linux/smp_lock.h>
-#include <linux/completion.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <linux/blk.h>
-#include <linux/highmem.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-
-/*
- * MAC Floppy IWM hooks
- */
-
-#ifdef CONFIG_MAC_FLOPPY_IWM
-extern int mac_floppy_init(void);
-#endif
-
-/*
- * For the allocated request tables
- */
-static kmem_cache_t *request_cachep;
-
-/*
- * The "disk" task queue is used to start the actual requests
- * after a plug
- */
-DECLARE_TASK_QUEUE(tq_disk);
-
-/*
- * Protect the request list against multiple users..
- *
- * With this spinlock the Linux block IO subsystem is 100% SMP threaded
- * from the IRQ event side, and almost 100% SMP threaded from the syscall
- * side (we still have protect against block device array operations, and
- * the do_request() side is casually still unsafe. The kernel lock protects
- * this part currently.).
- *
- * there is a fair chance that things will work just OK if these functions
- * are called with no global kernel lock held ...
- */
-spinlock_t io_request_lock = SPIN_LOCK_UNLOCKED;
-
-/* This specifies how many sectors to read ahead on the disk. */
-
-int read_ahead[MAX_BLKDEV];
-
-/* blk_dev_struct is:
- *     *request_fn
- *     *current_request
- */
-struct blk_dev_struct blk_dev[MAX_BLKDEV]; /* initialized by blk_dev_init() */
-
-/*
- * blk_size contains the size of all block-devices in units of 1024 byte
- * sectors:
- *
- * blk_size[MAJOR][MINOR]
- *
- * if (!blk_size[MAJOR]) then no minor size checking is done.
- */
-int * blk_size[MAX_BLKDEV];
-
-/*
- * blksize_size contains the size of all block-devices:
- *
- * blksize_size[MAJOR][MINOR]
- *
- * if (!blksize_size[MAJOR]) then 1024 bytes is assumed.
- */
-int * blksize_size[MAX_BLKDEV];
-
-/*
- * hardsect_size contains the size of the hardware sector of a device.
- *
- * hardsect_size[MAJOR][MINOR]
- *
- * if (!hardsect_size[MAJOR])
- *             then 512 bytes is assumed.
- * else
- *             sector_size is hardsect_size[MAJOR][MINOR]
- * This is currently set by some scsi devices and read by the msdos fs driver.
- * Other uses may appear later.
- */
-int * hardsect_size[MAX_BLKDEV];
-
-/*
- * The following tunes the read-ahead algorithm in mm/filemap.c
- */
-int * max_readahead[MAX_BLKDEV];
-
-/*
- * Max number of sectors per request
- */
-int * max_sectors[MAX_BLKDEV];
-
-/*
- * How many reqeusts do we allocate per queue,
- * and how many do we "batch" on freeing them?
- */
-static int queue_nr_requests, batch_requests;
-
-static inline int get_max_sectors(kdev_t dev)
-{
-       if (!max_sectors[MAJOR(dev)])
-               return MAX_SECTORS;
-       return max_sectors[MAJOR(dev)][MINOR(dev)];
-}
-
-inline request_queue_t *blk_get_queue(kdev_t dev)
-{
-       struct blk_dev_struct *bdev = blk_dev + MAJOR(dev);
-
-       if (bdev->queue)
-               return bdev->queue(dev);
-       else
-               return &blk_dev[MAJOR(dev)].request_queue;
-}
-
-static int __blk_cleanup_queue(struct request_list *list)
-{
-       struct list_head *head = &list->free;
-       struct request *rq;
-       int i = 0;
-
-       while (!list_empty(head)) {
-               rq = list_entry(head->next, struct request, queue);
-               list_del(&rq->queue);
-               kmem_cache_free(request_cachep, rq);
-               i++;
-       };
-
-       if (i != list->count)
-               printk("request list leak!\n");
-
-       list->count = 0;
-       return i;
-}
-
-/**
- * blk_cleanup_queue: - release a &request_queue_t when it is no longer needed
- * @q:    the request queue to be released
- *
- * Description:
- *     blk_cleanup_queue is the pair to blk_init_queue().  It should
- *     be called when a request queue is being released; typically
- *     when a block device is being de-registered.  Currently, its
- *     primary task it to free all the &struct request structures that
- *     were allocated to the queue.
- * Caveat: 
- *     Hopefully the low level driver will have finished any
- *     outstanding requests first...
- **/
-void blk_cleanup_queue(request_queue_t * q)
-{
-       int count = queue_nr_requests;
-
-       count -= __blk_cleanup_queue(&q->rq[READ]);
-       count -= __blk_cleanup_queue(&q->rq[WRITE]);
-
-       if (count)
-               printk("blk_cleanup_queue: leaked requests (%d)\n", count);
-
-       memset(q, 0, sizeof(*q));
-}
-
-/**
- * blk_queue_headactive - indicate whether head of request queue may be active
- * @q:       The queue which this applies to.
- * @active:  A flag indication where the head of the queue is active.
- *
- * Description:
- *    The driver for a block device may choose to leave the currently active
- *    request on the request queue, removing it only when it has completed.
- *    The queue handling routines assume this by default for safety reasons
- *    and will not involve the head of the request queue in any merging or
- *    reordering of requests when the queue is unplugged (and thus may be
- *    working on this particular request).
- *
- *    If a driver removes requests from the queue before processing them, then
- *    it may indicate that it does so, there by allowing the head of the queue
- *    to be involved in merging and reordering.  This is done be calling
- *    blk_queue_headactive() with an @active flag of %0.
- *
- *    If a driver processes several requests at once, it must remove them (or
- *    at least all but one of them) from the request queue.
- *
- *    When a queue is plugged the head will be assumed to be inactive.
- **/
-void blk_queue_headactive(request_queue_t * q, int active)
-{
-       q->head_active = active;
-}
-
-/**
- * blk_queue_make_request - define an alternate make_request function for a device
- * @q:  the request queue for the device to be affected
- * @mfn: the alternate make_request function
- *
- * Description:
- *    The normal way for &struct buffer_heads to be passed to a device
- *    driver is for them to be collected into requests on a request
- *    queue, and then to allow the device driver to select requests
- *    off that queue when it is ready.  This works well for many block
- *    devices. However some block devices (typically virtual devices
- *    such as md or lvm) do not benefit from the processing on the
- *    request queue, and are served best by having the requests passed
- *    directly to them.  This can be achieved by providing a function
- *    to blk_queue_make_request().
- *
- * Caveat:
- *    The driver that does this *must* be able to deal appropriately
- *    with buffers in "highmemory", either by calling bh_kmap() to get
- *    a kernel mapping, to by calling create_bounce() to create a
- *    buffer in normal memory.
- **/
-
-void blk_queue_make_request(request_queue_t * q, make_request_fn * mfn)
-{
-       q->make_request_fn = mfn;
-}
-
-static inline int ll_new_segment(request_queue_t *q, struct request *req, int max_segments)
-{
-       if (req->nr_segments < max_segments) {
-               req->nr_segments++;
-               return 1;
-       }
-       return 0;
-}
-
-static int ll_back_merge_fn(request_queue_t *q, struct request *req, 
-                           struct buffer_head *bh, int max_segments)
-{
-       if (req->bhtail->b_data + req->bhtail->b_size == bh->b_data)
-               return 1;
-       return ll_new_segment(q, req, max_segments);
-}
-
-static int ll_front_merge_fn(request_queue_t *q, struct request *req, 
-                            struct buffer_head *bh, int max_segments)
-{
-       if (bh->b_data + bh->b_size == req->bh->b_data)
-               return 1;
-       return ll_new_segment(q, req, max_segments);
-}
-
-static int ll_merge_requests_fn(request_queue_t *q, struct request *req,
-                               struct request *next, int max_segments)
-{
-       int total_segments = req->nr_segments + next->nr_segments;
-
-       if (req->bhtail->b_data + req->bhtail->b_size == next->bh->b_data)
-               total_segments--;
-    
-       if (total_segments > max_segments)
-               return 0;
-
-       req->nr_segments = total_segments;
-       return 1;
-}
-
-/*
- * "plug" the device if there are no outstanding requests: this will
- * force the transfer to start only after we have put all the requests
- * on the list.
- *
- * This is called with interrupts off and no requests on the queue.
- * (and with the request spinlock acquired)
- */
-static void generic_plug_device(request_queue_t *q, kdev_t dev)
-{
-       /*
-        * no need to replug device
-        */
-       if (!list_empty(&q->queue_head) || q->plugged)
-               return;
-
-       q->plugged = 1;
-       queue_task(&q->plug_tq, &tq_disk);
-}
-
-/*
- * remove the plug and let it rip..
- */
-static inline void __generic_unplug_device(request_queue_t *q)
-{
-       if (q->plugged) {
-               q->plugged = 0;
-               if (!list_empty(&q->queue_head))
-                       q->request_fn(q);
-       }
-}
-
-void generic_unplug_device(void *data)
-{
-       request_queue_t *q = (request_queue_t *) data;
-       unsigned long flags;
-
-       spin_lock_irqsave(&io_request_lock, flags);
-       __generic_unplug_device(q);
-       spin_unlock_irqrestore(&io_request_lock, flags);
-}
-
-static void blk_init_free_list(request_queue_t *q)
-{
-       struct request *rq;
-       int i;
-
-       INIT_LIST_HEAD(&q->rq[READ].free);
-       INIT_LIST_HEAD(&q->rq[WRITE].free);
-       q->rq[READ].count = 0;
-       q->rq[WRITE].count = 0;
-
-       /*
-        * Divide requests in half between read and write
-        */
-       for (i = 0; i < queue_nr_requests; i++) {
-               rq = kmem_cache_alloc(request_cachep, SLAB_KERNEL);
-               if (rq == NULL) {
-                       /* We'll get a `leaked requests' message from blk_cleanup_queue */
-                       printk(KERN_EMERG "blk_init_free_list: error allocating requests\n");
-                       break;
-               }
-               memset(rq, 0, sizeof(struct request));
-               rq->rq_status = RQ_INACTIVE;
-               list_add(&rq->queue, &q->rq[i&1].free);
-               q->rq[i&1].count++;
-       }
-
-       init_waitqueue_head(&q->wait_for_request);
-       spin_lock_init(&q->queue_lock);
-}
-
-static int __make_request(request_queue_t * q, int rw, struct buffer_head * bh);
-
-/**
- * blk_init_queue  - prepare a request queue for use with a block device
- * @q:    The &request_queue_t to be initialised
- * @rfn:  The function to be called to process requests that have been
- *        placed on the queue.
- *
- * Description:
- *    If a block device wishes to use the standard request handling procedures,
- *    which sorts requests and coalesces adjacent requests, then it must
- *    call blk_init_queue().  The function @rfn will be called when there
- *    are requests on the queue that need to be processed.  If the device
- *    supports plugging, then @rfn may not be called immediately when requests
- *    are available on the queue, but may be called at some time later instead.
- *    Plugged queues are generally unplugged when a buffer belonging to one
- *    of the requests on the queue is needed, or due to memory pressure.
- *
- *    @rfn is not required, or even expected, to remove all requests off the
- *    queue, but only as many as it can handle at a time.  If it does leave
- *    requests on the queue, it is responsible for arranging that the requests
- *    get dealt with eventually.
- *
- *    A global spin lock $io_request_lock must be held while manipulating the
- *    requests on the request queue.
- *
- *    The request on the head of the queue is by default assumed to be
- *    potentially active, and it is not considered for re-ordering or merging
- *    whenever the given queue is unplugged. This behaviour can be changed with
- *    blk_queue_headactive().
- *
- * Note:
- *    blk_init_queue() must be paired with a blk_cleanup_queue() call
- *    when the block device is deactivated (such as at module unload).
- **/
-void blk_init_queue(request_queue_t * q, request_fn_proc * rfn)
-{
-       INIT_LIST_HEAD(&q->queue_head);
-       elevator_init(&q->elevator, ELEVATOR_LINUS);
-       blk_init_free_list(q);
-       q->request_fn           = rfn;
-       q->back_merge_fn        = ll_back_merge_fn;
-       q->front_merge_fn       = ll_front_merge_fn;
-       q->merge_requests_fn    = ll_merge_requests_fn;
-       q->make_request_fn      = __make_request;
-       q->plug_tq.sync         = 0;
-       q->plug_tq.routine      = &generic_unplug_device;
-       q->plug_tq.data         = q;
-       q->plugged              = 0;
-       /*
-        * These booleans describe the queue properties.  We set the
-        * default (and most common) values here.  Other drivers can
-        * use the appropriate functions to alter the queue properties.
-        * as appropriate.
-        */
-       q->plug_device_fn       = generic_plug_device;
-       q->head_active          = 1;
-}
-
-#define blkdev_free_rq(list) list_entry((list)->next, struct request, queue);
-/*
- * Get a free request. io_request_lock must be held and interrupts
- * disabled on the way in.
- */
-static inline struct request *get_request(request_queue_t *q, int rw)
-{
-       struct request *rq = NULL;
-       struct request_list *rl = q->rq + rw;
-
-       if (!list_empty(&rl->free)) {
-               rq = blkdev_free_rq(&rl->free);
-               list_del(&rq->queue);
-               rl->count--;
-               rq->rq_status = RQ_ACTIVE;
-               rq->special = NULL;
-               rq->q = q;
-       }
-
-       return rq;
-}
-
-/*
- * No available requests for this queue, unplug the device.
- */
-static struct request *__get_request_wait(request_queue_t *q, int rw)
-{
-       register struct request *rq;
-       DECLARE_WAITQUEUE(wait, current);
-
-       generic_unplug_device(q);
-       add_wait_queue(&q->wait_for_request, &wait);
-       do {
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               if (q->rq[rw].count < batch_requests)
-                       schedule();
-               spin_lock_irq(&io_request_lock);
-               rq = get_request(q,rw);
-               spin_unlock_irq(&io_request_lock);
-       } while (rq == NULL);
-       remove_wait_queue(&q->wait_for_request, &wait);
-       current->state = TASK_RUNNING;
-       return rq;
-}
-
-static inline struct request *get_request_wait(request_queue_t *q, int rw)
-{
-       register struct request *rq;
-
-       spin_lock_irq(&io_request_lock);
-       rq = get_request(q, rw);
-       spin_unlock_irq(&io_request_lock);
-       if (rq)
-               return rq;
-       return __get_request_wait(q, rw);
-}
-
-/* RO fail safe mechanism */
-
-static long ro_bits[MAX_BLKDEV][8];
-
-int is_read_only(kdev_t dev)
-{
-       int minor,major;
-
-       major = MAJOR(dev);
-       minor = MINOR(dev);
-       if (major < 0 || major >= MAX_BLKDEV) return 0;
-       return ro_bits[major][minor >> 5] & (1 << (minor & 31));
-}
-
-void set_device_ro(kdev_t dev,int flag)
-{
-       int minor,major;
-
-       major = MAJOR(dev);
-       minor = MINOR(dev);
-       if (major < 0 || major >= MAX_BLKDEV) return;
-       if (flag) ro_bits[major][minor >> 5] |= 1 << (minor & 31);
-       else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
-}
-
-inline void drive_stat_acct (kdev_t dev, int rw,
-                               unsigned long nr_sectors, int new_io)
-{
-       unsigned int major = MAJOR(dev);
-       unsigned int index;
-
-       index = disk_index(dev);
-       if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
-               return;
-
-       kstat.dk_drive[major][index] += new_io;
-       if (rw == READ) {
-               kstat.dk_drive_rio[major][index] += new_io;
-               kstat.dk_drive_rblk[major][index] += nr_sectors;
-       } else if (rw == WRITE) {
-               kstat.dk_drive_wio[major][index] += new_io;
-               kstat.dk_drive_wblk[major][index] += nr_sectors;
-       } else
-               printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n");
-}
-
-/*
- * add-request adds a request to the linked list.
- * io_request_lock is held and interrupts disabled, as we muck with the
- * request queue list.
- *
- * By this point, req->cmd is always either READ/WRITE, never READA,
- * which is important for drive_stat_acct() above.
- */
-static inline void add_request(request_queue_t * q, struct request * req,
-                              struct list_head *insert_here)
-{
-       drive_stat_acct(req->rq_dev, req->cmd, req->nr_sectors, 1);
-
-       if (!q->plugged && q->head_active && insert_here == &q->queue_head) {
-               spin_unlock_irq(&io_request_lock);
-               printk("list_empty(&q->queue_head) is %d\n", 
-                      list_empty(&q->queue_head)); 
-               BUG();
-       }
-
-       /*
-        * elevator indicated where it wants this request to be
-        * inserted at elevator_merge time
-        */
-       list_add(&req->queue, insert_here);
-}
-
-/*
- * Must be called with io_request_lock held and interrupts disabled
- */
-inline void blkdev_release_request(struct request *req)
-{
-       request_queue_t *q = req->q;
-       int rw = req->cmd;
-
-       req->rq_status = RQ_INACTIVE;
-       req->q = NULL;
-
-       /*
-        * Request may not have originated from ll_rw_blk. if not,
-        * assume it has free buffers and check waiters
-        */
-       if (q) {
-               list_add(&req->queue, &q->rq[rw].free);
-               if (++q->rq[rw].count >= batch_requests && waitqueue_active(&q->wait_for_request))
-                       wake_up(&q->wait_for_request);
-       }
-}
-
-/*
- * Has to be called with the request spinlock acquired
- */
-static void attempt_merge(request_queue_t * q,
-                         struct request *req,
-                         int max_sectors,
-                         int max_segments)
-{
-       struct request *next;
-  
-       next = blkdev_next_request(req);
-       if (req->sector + req->nr_sectors != next->sector)
-               return;
-       if (req->cmd != next->cmd
-           || req->rq_dev != next->rq_dev
-           || req->nr_sectors + next->nr_sectors > max_sectors
-           || next->waiting)
-               return;
-       /*
-        * If we are not allowed to merge these requests, then
-        * return.  If we are allowed to merge, then the count
-        * will have been updated to the appropriate number,
-        * and we shouldn't do it here too.
-        */
-       if (!q->merge_requests_fn(q, req, next, max_segments))
-               return;
-
-       q->elevator.elevator_merge_req_fn(req, next);
-       req->bhtail->b_reqnext = next->bh;
-       req->bhtail = next->bhtail;
-       req->nr_sectors = req->hard_nr_sectors += next->hard_nr_sectors;
-       list_del(&next->queue);
-       blkdev_release_request(next);
-}
-
-static inline void attempt_back_merge(request_queue_t * q,
-                                     struct request *req,
-                                     int max_sectors,
-                                     int max_segments)
-{
-       if (&req->queue == q->queue_head.prev)
-               return;
-       attempt_merge(q, req, max_sectors, max_segments);
-}
-
-static inline void attempt_front_merge(request_queue_t * q,
-                                      struct list_head * head,
-                                      struct request *req,
-                                      int max_sectors,
-                                      int max_segments)
-{
-       struct list_head * prev;
-
-       prev = req->queue.prev;
-       if (head == prev)
-               return;
-       attempt_merge(q, blkdev_entry_to_request(prev), max_sectors, max_segments);
-}
-
-static int __make_request(request_queue_t * q, int rw,
-                                 struct buffer_head * bh)
-{
-       unsigned int sector, count;
-       int max_segments = MAX_SEGMENTS;
-       struct request * req, *freereq = NULL;
-       int rw_ahead, max_sectors, el_ret;
-       struct list_head *head, *insert_here;
-       int latency;
-       elevator_t *elevator = &q->elevator;
-
-       count = bh->b_size >> 9;
-       sector = bh->b_rsector;
-
-       rw_ahead = 0;   /* normal case; gets changed below for READA */
-       switch (rw) {
-               case READA:
-                       rw_ahead = 1;
-                       rw = READ;      /* drop into READ */
-               case READ:
-               case WRITE:
-                       latency = elevator_request_latency(elevator, rw);
-                       break;
-               default:
-                       BUG();
-                       goto end_io;
-       }
-
-       /* We'd better have a real physical mapping!
-          Check this bit only if the buffer was dirty and just locked
-          down by us so at this point flushpage will block and
-          won't clear the mapped bit under us. */
-       if (!buffer_mapped(bh))
-               BUG();
-
-       /*
-        * Temporary solution - in 2.5 this will be done by the lowlevel
-        * driver. Create a bounce buffer if the buffer data points into
-        * high memory - keep the original buffer otherwise.
-        */
-#if CONFIG_HIGHMEM
-       bh = create_bounce(rw, bh);
-#endif
-
-/* look for a free request. */
-       /*
-        * Try to coalesce the new request with old requests
-        */
-       max_sectors = get_max_sectors(bh->b_rdev);
-
-again:
-       req = NULL;
-       head = &q->queue_head;
-       /*
-        * Now we acquire the request spinlock, we have to be mega careful
-        * not to schedule or do something nonatomic
-        */
-       spin_lock_irq(&io_request_lock);
-
-       insert_here = head->prev;
-       if (list_empty(head)) {
-               q->plug_device_fn(q, bh->b_rdev); /* is atomic */
-               goto get_rq;
-       } else if (q->head_active && !q->plugged)
-               head = head->next;
-
-       el_ret = elevator->elevator_merge_fn(q, &req, head, bh, rw,max_sectors);
-       switch (el_ret) {
-
-               case ELEVATOR_BACK_MERGE:
-                       if (!q->back_merge_fn(q, req, bh, max_segments))
-                               break;
-                       elevator->elevator_merge_cleanup_fn(q, req, count);
-                       req->bhtail->b_reqnext = bh;
-                       req->bhtail = bh;
-                       req->nr_sectors = req->hard_nr_sectors += count;
-                       blk_started_io(count);
-                       drive_stat_acct(req->rq_dev, req->cmd, count, 0);
-                       attempt_back_merge(q, req, max_sectors, max_segments);
-                       goto out;
-
-               case ELEVATOR_FRONT_MERGE:
-                       if (!q->front_merge_fn(q, req, bh, max_segments))
-                               break;
-                       elevator->elevator_merge_cleanup_fn(q, req, count);
-                       bh->b_reqnext = req->bh;
-                       req->bh = bh;
-                       req->buffer = bh->b_data;
-                       req->current_nr_sectors = count;
-                       req->sector = req->hard_sector = sector;
-                       req->nr_sectors = req->hard_nr_sectors += count;
-                       blk_started_io(count);
-                       drive_stat_acct(req->rq_dev, req->cmd, count, 0);
-                       attempt_front_merge(q, head, req, max_sectors, max_segments);
-                       goto out;
-
-               /*
-                * elevator says don't/can't merge. get new request
-                */
-               case ELEVATOR_NO_MERGE:
-                       /*
-                        * use elevator hints as to where to insert the
-                        * request. if no hints, just add it to the back
-                        * of the queue
-                        */
-                       if (req)
-                               insert_here = &req->queue;
-                       break;
-
-               default:
-                       printk("elevator returned crap (%d)\n", el_ret);
-                       BUG();
-       }
-               
-       /*
-        * Grab a free request from the freelist - if that is empty, check
-        * if we are doing read ahead and abort instead of blocking for
-        * a free slot.
-        */
-get_rq:
-       if (freereq) {
-               req = freereq;
-               freereq = NULL;
-       } else if ((req = get_request(q, rw)) == NULL) {
-               spin_unlock_irq(&io_request_lock);
-               if (rw_ahead)
-                       goto end_io;
-
-               freereq = __get_request_wait(q, rw);
-               goto again;
-       }
-
-/* fill up the request-info, and add it to the queue */
-       req->elevator_sequence = latency;
-       req->cmd = rw;
-       req->errors = 0;
-       req->hard_sector = req->sector = sector;
-       req->hard_nr_sectors = req->nr_sectors = count;
-       req->current_nr_sectors = count;
-       req->nr_segments = 1; /* Always 1 for a new request. */
-       req->nr_hw_segments = 1; /* Always 1 for a new request. */
-       req->buffer = bh->b_data;
-       req->waiting = NULL;
-       req->bh = bh;
-       req->bhtail = bh;
-       req->rq_dev = bh->b_rdev;
-       blk_started_io(count);
-
-       add_request(q, req, insert_here);
-out:
-       if (freereq)
-               blkdev_release_request(freereq);
-       spin_unlock_irq(&io_request_lock);
-       return 0;
-end_io:
-       bh->b_end_io(bh, test_bit(BH_Uptodate, &bh->b_state));
-       return 0;
-}
-
-/**
- * generic_make_request: hand a buffer head to it's device driver for I/O
- * @rw:  READ, WRITE, or READA - what sort of I/O is desired.
- * @bh:  The buffer head describing the location in memory and on the device.
- *
- * generic_make_request() is used to make I/O requests of block
- * devices. It is passed a &struct buffer_head and a &rw value.  The
- * %READ and %WRITE options are (hopefully) obvious in meaning.  The
- * %READA value means that a read is required, but that the driver is
- * free to fail the request if, for example, it cannot get needed
- * resources immediately.
- *
- * generic_make_request() does not return any status.  The
- * success/failure status of the request, along with notification of
- * completion, is delivered asynchronously through the bh->b_end_io
- * function described (one day) else where.
- *
- * The caller of generic_make_request must make sure that b_page,
- * b_addr, b_size are set to describe the memory buffer, that b_rdev
- * and b_rsector are set to describe the device address, and the
- * b_end_io and optionally b_private are set to describe how
- * completion notification should be signaled.  BH_Mapped should also
- * be set (to confirm that b_dev and b_blocknr are valid).
- *
- * generic_make_request and the drivers it calls may use b_reqnext,
- * and may change b_rdev and b_rsector.  So the values of these fields
- * should NOT be depended on after the call to generic_make_request.
- * Because of this, the caller should record the device address
- * information in b_dev and b_blocknr.
- *
- * Apart from those fields mentioned above, no other fields, and in
- * particular, no other flags, are changed by generic_make_request or
- * any lower level drivers.
- * */
-void generic_make_request (int rw, struct buffer_head * bh)
-{
-       int major = MAJOR(bh->b_rdev);
-       int minorsize = 0;
-       request_queue_t *q;
-
-       if (!bh->b_end_io)
-               BUG();
-
-       /* Test device size, when known. */
-       if (blk_size[major])
-               minorsize = blk_size[major][MINOR(bh->b_rdev)];
-       if (minorsize) {
-               unsigned long maxsector = (minorsize << 1) + 1;
-               unsigned long sector = bh->b_rsector;
-               unsigned int count = bh->b_size >> 9;
-
-               if (maxsector < count || maxsector - count < sector) {
-                       /* Yecch */
-                       bh->b_state &= (1 << BH_Lock) | (1 << BH_Mapped);
-
-                       /* This may well happen - the kernel calls bread()
-                          without checking the size of the device, e.g.,
-                          when mounting a device. */
-                       printk(KERN_INFO
-                              "attempt to access beyond end of device\n");
-                       printk(KERN_INFO "%s: rw=%d, want=%ld, limit=%d\n",
-                              kdevname(bh->b_rdev), rw,
-                              (sector + count)>>1, minorsize);
-
-                       /* Yecch again */
-                       bh->b_end_io(bh, 0);
-                       return;
-               }
-       }
-
-       /*
-        * Resolve the mapping until finished. (drivers are
-        * still free to implement/resolve their own stacking
-        * by explicitly returning 0)
-        */
-       /* NOTE: we don't repeat the blk_size check for each new device.
-        * Stacking drivers are expected to know what they are doing.
-        */
-       do {
-               q = blk_get_queue(bh->b_rdev);
-               if (!q) {
-                       printk(KERN_ERR
-                              "generic_make_request: Trying to access "
-                              "nonexistent block-device %s (%ld)\n",
-                              kdevname(bh->b_rdev), bh->b_rsector);
-                       buffer_IO_error(bh);
-                       break;
-               }
-       } while (q->make_request_fn(q, rw, bh));
-}
-
-
-/**
- * submit_bh: submit a buffer_head to the block device later for I/O
- * @rw: whether to %READ or %WRITE, or maybe to %READA (read ahead)
- * @bh: The &struct buffer_head which describes the I/O
- *
- * submit_bh() is very similar in purpose to generic_make_request(), and
- * uses that function to do most of the work.
- *
- * The extra functionality provided by submit_bh is to determine
- * b_rsector from b_blocknr and b_size, and to set b_rdev from b_dev.
- * This is is appropriate for IO requests that come from the buffer
- * cache and page cache which (currently) always use aligned blocks.
- */
-void submit_bh(int rw, struct buffer_head * bh)
-{
-       int count = bh->b_size >> 9;
-
-       if (!test_bit(BH_Lock, &bh->b_state))
-               BUG();
-
-       set_bit(BH_Req, &bh->b_state);
-
-       /*
-        * First step, 'identity mapping' - RAID or LVM might
-        * further remap this.
-        */
-       bh->b_rdev = bh->b_dev;
-       bh->b_rsector = bh->b_blocknr * count;
-
-       generic_make_request(rw, bh);
-
-       switch (rw) {
-               case WRITE:
-                       kstat.pgpgout += count;
-                       break;
-               default:
-                       kstat.pgpgin += count;
-                       break;
-       }
-}
-
-/**
- * ll_rw_block: low-level access to block devices
- * @rw: whether to %READ or %WRITE or maybe %READA (readahead)
- * @nr: number of &struct buffer_heads in the array
- * @bhs: array of pointers to &struct buffer_head
- *
- * ll_rw_block() takes an array of pointers to &struct buffer_heads,
- * and requests an I/O operation on them, either a %READ or a %WRITE.
- * The third %READA option is described in the documentation for
- * generic_make_request() which ll_rw_block() calls.
- *
- * This function provides extra functionality that is not in
- * generic_make_request() that is relevant to buffers in the buffer
- * cache or page cache.  In particular it drops any buffer that it
- * cannot get a lock on (with the BH_Lock state bit), any buffer that
- * appears to be clean when doing a write request, and any buffer that
- * appears to be up-to-date when doing read request.  Further it marks
- * as clean buffers that are processed for writing (the buffer cache
- * wont assume that they are actually clean until the buffer gets
- * unlocked).
- *
- * ll_rw_block sets b_end_io to simple completion handler that marks
- * the buffer up-to-date (if approriate), unlocks the buffer and wakes
- * any waiters.  As client that needs a more interesting completion
- * routine should call submit_bh() (or generic_make_request())
- * directly.
- *
- * Caveat:
- *  All of the buffers must be for the same device, and must also be
- *  of the current approved size for the device.  */
-
-void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
-{
-       unsigned int major;
-       int correct_size;
-       int i;
-
-       if (!nr)
-               return;
-
-       major = MAJOR(bhs[0]->b_dev);
-
-       /* Determine correct block size for this device. */
-       correct_size = get_hardsect_size(bhs[0]->b_dev);
-
-       /* Verify requested block sizes. */
-       for (i = 0; i < nr; i++) {
-               struct buffer_head *bh = bhs[i];
-               if (bh->b_size % correct_size) {
-                       printk(KERN_NOTICE "ll_rw_block: device %s: "
-                              "only %d-char blocks implemented (%u)\n",
-                              kdevname(bhs[0]->b_dev),
-                              correct_size, bh->b_size);
-                       goto sorry;
-               }
-       }
-
-       if ((rw & WRITE) && is_read_only(bhs[0]->b_dev)) {
-               printk(KERN_NOTICE "Can't write to read-only device %s\n",
-                      kdevname(bhs[0]->b_dev));
-               goto sorry;
-       }
-
-       for (i = 0; i < nr; i++) {
-               struct buffer_head *bh = bhs[i];
-
-               /* Only one thread can actually submit the I/O. */
-               if (test_and_set_bit(BH_Lock, &bh->b_state))
-                       continue;
-
-               /* We have the buffer lock */
-               atomic_inc(&bh->b_count);
-               bh->b_end_io = end_buffer_io_sync;
-
-               switch(rw) {
-               case WRITE:
-                       if (!atomic_set_buffer_clean(bh))
-                               /* Hmmph! Nothing to write */
-                               goto end_io;
-                       __mark_buffer_clean(bh);
-                       break;
-
-               case READA:
-               case READ:
-                       if (buffer_uptodate(bh))
-                               /* Hmmph! Already have it */
-                               goto end_io;
-                       break;
-               default:
-                       BUG();
-       end_io:
-                       bh->b_end_io(bh, test_bit(BH_Uptodate, &bh->b_state));
-                       continue;
-               }
-
-               submit_bh(rw, bh);
-       }
-       return;
-
-sorry:
-       /* Make sure we don't get infinite dirty retries.. */
-       for (i = 0; i < nr; i++)
-               mark_buffer_clean(bhs[i]);
-}
-
-#ifdef CONFIG_STRAM_SWAP
-extern int stram_device_init (void);
-#endif
-
-
-/**
- * end_that_request_first - end I/O on one buffer.
- * @req:      the request being processed
- * @uptodate: 0 for I/O error
- * @name:     the name printed for an I/O error
- *
- * Description:
- *     Ends I/O on the first buffer attached to @req, and sets it up
- *     for the next buffer_head (if any) in the cluster.
- *     
- * Return:
- *     0 - we are done with this request, call end_that_request_last()
- *     1 - still buffers pending for this request
- *
- * Caveat: 
- *     Drivers implementing their own end_request handling must call
- *     blk_finished_io() appropriately.
- **/
-
-int end_that_request_first (struct request *req, int uptodate, char *name)
-{
-       struct buffer_head * bh;
-       int nsect;
-
-       req->errors = 0;
-       if (!uptodate)
-               printk("end_request: I/O error, dev %s (%s), sector %lu\n",
-                       kdevname(req->rq_dev), name, req->sector);
-
-       if ((bh = req->bh) != NULL) {
-               nsect = bh->b_size >> 9;
-               blk_finished_io(nsect);
-               req->bh = bh->b_reqnext;
-               bh->b_reqnext = NULL;
-               bh->b_end_io(bh, uptodate);
-               if ((bh = req->bh) != NULL) {
-                       req->hard_sector += nsect;
-                       req->hard_nr_sectors -= nsect;
-                       req->sector = req->hard_sector;
-                       req->nr_sectors = req->hard_nr_sectors;
-
-                       req->current_nr_sectors = bh->b_size >> 9;
-                       if (req->nr_sectors < req->current_nr_sectors) {
-                               req->nr_sectors = req->current_nr_sectors;
-                               printk("end_request: buffer-list destroyed\n");
-                       }
-                       req->buffer = bh->b_data;
-                       return 1;
-               }
-       }
-       return 0;
-}
-
-void end_that_request_last(struct request *req)
-{
-       if (req->waiting != NULL)
-               complete(req->waiting);
-
-       blkdev_release_request(req);
-}
-
-#define MB(kb) ((kb) << 10)
-
-int __init blk_dev_init(void)
-{
-       struct blk_dev_struct *dev;
-       int total_ram;
-
-       request_cachep = kmem_cache_create("blkdev_requests",
-                                          sizeof(struct request),
-                                          0, SLAB_HWCACHE_ALIGN, NULL, NULL);
-
-       if (!request_cachep)
-               panic("Can't create request pool slab cache\n");
-
-       for (dev = blk_dev + MAX_BLKDEV; dev-- != blk_dev;)
-               dev->queue = NULL;
-
-       memset(ro_bits,0,sizeof(ro_bits));
-       memset(max_readahead, 0, sizeof(max_readahead));
-       memset(max_sectors, 0, sizeof(max_sectors));
-
-       total_ram = nr_free_pages() << (PAGE_SHIFT - 10);
-
-       /*
-        * Free request slots per queue.
-        * (Half for reads, half for writes)
-        */
-       queue_nr_requests = 64;
-       if (total_ram > MB(32))
-               queue_nr_requests = 128;
-
-       /*
-        * Batch frees according to queue length
-        */
-       batch_requests = queue_nr_requests/4;
-       printk("block: %d slots per queue, batch=%d\n", queue_nr_requests, batch_requests);
-
-#ifdef CONFIG_AMIGA_Z2RAM
-       z2_init();
-#endif
-#ifdef CONFIG_STRAM_SWAP
-       stram_device_init();
-#endif
-#ifdef CONFIG_BLK_DEV_RAM
-       rd_init();
-#endif
-#ifdef CONFIG_ISP16_CDI
-       isp16_init();
-#endif
-#if defined(CONFIG_IDE) && defined(CONFIG_BLK_DEV_IDE)
-       ide_init();             /* this MUST precede hd_init */
-#endif
-#if defined(CONFIG_IDE) && defined(CONFIG_BLK_DEV_HD)
-       hd_init();
-#endif
-#ifdef CONFIG_BLK_DEV_PS2
-       ps2esdi_init();
-#endif
-#ifdef CONFIG_BLK_DEV_XD
-       xd_init();
-#endif
-#ifdef CONFIG_BLK_DEV_MFM
-       mfm_init();
-#endif
-#ifdef CONFIG_PARIDE
-       { extern void paride_init(void); paride_init(); };
-#endif
-#ifdef CONFIG_MAC_FLOPPY
-       swim3_init();
-#endif
-#ifdef CONFIG_BLK_DEV_SWIM_IOP
-       swimiop_init();
-#endif
-#ifdef CONFIG_AMIGA_FLOPPY
-       amiga_floppy_init();
-#endif
-#ifdef CONFIG_ATARI_FLOPPY
-       atari_floppy_init();
-#endif
-#ifdef CONFIG_BLK_DEV_FD
-       floppy_init();
-#else
-#if defined(__i386__) && !defined(CONFIG_XENO) /* Do we even need this? */
-       outb_p(0xc, 0x3f2);
-#endif
-#endif
-#ifdef CONFIG_CDU31A
-       cdu31a_init();
-#endif
-#ifdef CONFIG_ATARI_ACSI
-       acsi_init();
-#endif
-#ifdef CONFIG_MCD
-       mcd_init();
-#endif
-#ifdef CONFIG_MCDX
-       mcdx_init();
-#endif
-#ifdef CONFIG_SBPCD
-       sbpcd_init();
-#endif
-#ifdef CONFIG_AZTCD
-       aztcd_init();
-#endif
-#ifdef CONFIG_CDU535
-       sony535_init();
-#endif
-#ifdef CONFIG_GSCD
-       gscd_init();
-#endif
-#ifdef CONFIG_CM206
-       cm206_init();
-#endif
-#ifdef CONFIG_OPTCD
-       optcd_init();
-#endif
-#ifdef CONFIG_SJCD
-       sjcd_init();
-#endif
-#ifdef CONFIG_APBLOCK
-       ap_init();
-#endif
-#ifdef CONFIG_DDV
-       ddv_init();
-#endif
-#ifdef CONFIG_MDISK
-       mdisk_init();
-#endif
-#ifdef CONFIG_DASD
-       dasd_init();
-#endif
-#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_BLOCK)
-       tapeblock_init();
-#endif
-#ifdef CONFIG_BLK_DEV_XPRAM
-        xpram_init();
-#endif
-
-#ifdef CONFIG_SUN_JSFLASH
-       jsfd_init();
-#endif
-
-#ifdef CONFIG_XENOLINUX_BLOCK
-    xlblk_init();
-#endif
-
-       return 0;
-};
-
-EXPORT_SYMBOL(io_request_lock);
-EXPORT_SYMBOL(end_that_request_first);
-EXPORT_SYMBOL(end_that_request_last);
-EXPORT_SYMBOL(blk_init_queue);
-EXPORT_SYMBOL(blk_get_queue);
-EXPORT_SYMBOL(blk_cleanup_queue);
-EXPORT_SYMBOL(blk_queue_headactive);
-EXPORT_SYMBOL(blk_queue_make_request);
-EXPORT_SYMBOL(generic_make_request);
-EXPORT_SYMBOL(blkdev_release_request);
-EXPORT_SYMBOL(generic_unplug_device);
diff --git a/old/xenolinux-2.4.16-sparse/drivers/block/rd.c b/old/xenolinux-2.4.16-sparse/drivers/block/rd.c
deleted file mode 100644 (file)
index ffcc9d3..0000000
+++ /dev/null
@@ -1,1009 +0,0 @@
-/*
- * ramdisk.c - Multiple RAM disk driver - gzip-loading version - v. 0.8 beta.
- * 
- * (C) Chad Page, Theodore Ts'o, et. al, 1995. 
- *
- * This RAM disk is designed to have filesystems created on it and mounted
- * just like a regular floppy disk.  
- *  
- * It also does something suggested by Linus: use the buffer cache as the
- * RAM disk data.  This makes it possible to dynamically allocate the RAM disk
- * buffer - with some consequences I have to deal with as I write this. 
- * 
- * This code is based on the original ramdisk.c, written mostly by
- * Theodore Ts'o (TYT) in 1991.  The code was largely rewritten by
- * Chad Page to use the buffer cache to store the RAM disk data in
- * 1995; Theodore then took over the driver again, and cleaned it up
- * for inclusion in the mainline kernel.
- *
- * The original CRAMDISK code was written by Richard Lyons, and
- * adapted by Chad Page to use the new RAM disk interface.  Theodore
- * Ts'o rewrote it so that both the compressed RAM disk loader and the
- * kernel decompressor uses the same inflate.c codebase.  The RAM disk
- * loader now also loads into a dynamic (buffer cache based) RAM disk,
- * not the old static RAM disk.  Support for the old static RAM disk has
- * been completely removed.
- *
- * Loadable module support added by Tom Dyas.
- *
- * Further cleanups by Chad Page (page0588@sundance.sjsu.edu):
- *     Cosmetic changes in #ifdef MODULE, code movement, etc.
- *     When the RAM disk module is removed, free the protected buffers
- *     Default RAM disk size changed to 2.88 MB
- *
- *  Added initrd: Werner Almesberger & Hans Lermen, Feb '96
- *
- * 4/25/96 : Made RAM disk size a parameter (default is now 4 MB) 
- *             - Chad Page
- *
- * Add support for fs images split across >1 disk, Paul Gortmaker, Mar '98
- *
- * Make block size and block size shift for RAM disks a global macro
- * and set blk_size for -ENOSPC,     Werner Fink <werner@suse.de>, Apr '99
- */
-
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/minix_fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/romfs_fs.h>
-#include <linux/fs.h>
-#include <linux/kernel.h>
-#include <linux/hdreg.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/slab.h>
-#include <linux/ioctl.h>
-#include <linux/fd.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/devfs_fs_kernel.h>
-#include <linux/smp_lock.h>
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/byteorder.h>
-
-extern void wait_for_keypress(void);
-
-/*
- * 35 has been officially registered as the RAMDISK major number, but
- * so is the original MAJOR number of 1.  We're using 1 in
- * include/linux/major.h for now
- */
-#define MAJOR_NR RAMDISK_MAJOR
-#include <linux/blk.h>
-#include <linux/blkpg.h>
-
-/* The RAM disk size is now a parameter */
-#define NUM_RAMDISKS 16                /* This cannot be overridden (yet) */ 
-
-#ifndef MODULE
-/* We don't have to load RAM disks or gunzip them in a module. */
-#define RD_LOADER
-#define BUILD_CRAMDISK
-
-void rd_load(void);
-static int crd_load(struct file *fp, struct file *outfp);
-
-#ifdef CONFIG_BLK_DEV_INITRD
-static int initrd_users;
-#endif
-#endif
-
-/* Various static variables go here.  Most are used only in the RAM disk code.
- */
-
-static unsigned long rd_length[NUM_RAMDISKS];  /* Size of RAM disks in bytes   */
-static int rd_hardsec[NUM_RAMDISKS];           /* Size of real blocks in bytes */
-static int rd_blocksizes[NUM_RAMDISKS];                /* Size of 1024 byte blocks :)  */
-static int rd_kbsize[NUM_RAMDISKS];            /* Size in blocks of 1024 bytes */
-static devfs_handle_t devfs_handle;
-static struct block_device *rd_bdev[NUM_RAMDISKS];/* Protected device data */
-
-/*
- * Parameters for the boot-loading of the RAM disk.  These are set by
- * init/main.c (from arguments to the kernel command line) or from the
- * architecture-specific setup routine (from the stored boot sector
- * information). 
- */
-int rd_size = CONFIG_BLK_DEV_RAM_SIZE;         /* Size of the RAM disks */
-/*
- * It would be very desiderable to have a soft-blocksize (that in the case
- * of the ramdisk driver is also the hardblocksize ;) of PAGE_SIZE because
- * doing that we'll achieve a far better MM footprint. Using a rd_blocksize of
- * BLOCK_SIZE in the worst case we'll make PAGE_SIZE/BLOCK_SIZE buffer-pages
- * unfreeable. With a rd_blocksize of PAGE_SIZE instead we are sure that only
- * 1 page will be protected. Depending on the size of the ramdisk you
- * may want to change the ramdisk blocksize to achieve a better or worse MM
- * behaviour. The default is still BLOCK_SIZE (needed by rd_load_image that
- * supposes the filesystem in the image uses a BLOCK_SIZE blocksize).
- */
-int rd_blocksize = BLOCK_SIZE;                 /* blocksize of the RAM disks */
-
-#ifndef MODULE
-
-int rd_doload;                 /* 1 = load RAM disk, 0 = don't load */
-int rd_prompt = 1;             /* 1 = prompt for RAM disk, 0 = don't prompt */
-int rd_image_start;            /* starting block # of image */
-#ifdef CONFIG_BLK_DEV_INITRD
-unsigned long initrd_start, initrd_end;
-int mount_initrd = 1;          /* zero if initrd should not be mounted */
-int initrd_below_start_ok;
-
-static int __init no_initrd(char *str)
-{
-       mount_initrd = 0;
-       return 1;
-}
-
-__setup("noinitrd", no_initrd);
-
-#endif
-
-static int __init ramdisk_start_setup(char *str)
-{
-       rd_image_start = simple_strtol(str,NULL,0);
-       return 1;
-}
-
-static int __init load_ramdisk(char *str)
-{
-       rd_doload = simple_strtol(str,NULL,0) & 3;
-       return 1;
-}
-
-static int __init prompt_ramdisk(char *str)
-{
-       rd_prompt = simple_strtol(str,NULL,0) & 1;
-       return 1;
-}
-
-static int __init ramdisk_size(char *str)
-{
-       rd_size = simple_strtol(str,NULL,0);
-       return 1;
-}
-
-static int __init ramdisk_size2(char *str)
-{
-       return ramdisk_size(str);
-}
-
-static int __init ramdisk_blocksize(char *str)
-{
-       rd_blocksize = simple_strtol(str,NULL,0);
-       return 1;
-}
-
-__setup("ramdisk_start=", ramdisk_start_setup);
-__setup("load_ramdisk=", load_ramdisk);
-__setup("prompt_ramdisk=", prompt_ramdisk);
-__setup("ramdisk=", ramdisk_size);
-__setup("ramdisk_size=", ramdisk_size2);
-__setup("ramdisk_blocksize=", ramdisk_blocksize);
-
-#endif
-
-/*
- * Copyright (C) 2000 Linus Torvalds.
- *               2000 Transmeta Corp.
- * aops copied from ramfs.
- */
-static int ramdisk_readpage(struct file *file, struct page * page)
-{
-       if (!Page_Uptodate(page)) {
-               memset(kmap(page), 0, PAGE_CACHE_SIZE);
-               kunmap(page);
-               flush_dcache_page(page);
-               SetPageUptodate(page);
-       }
-       UnlockPage(page);
-       return 0;
-}
-
-static int ramdisk_prepare_write(struct file *file, struct page *page, unsigned offset, unsigned to)
-{
-       if (!Page_Uptodate(page)) {
-               void *addr = page_address(page);
-               memset(addr, 0, PAGE_CACHE_SIZE);
-               flush_dcache_page(page);
-               SetPageUptodate(page);
-       }
-       SetPageDirty(page);
-       return 0;
-}
-
-static int ramdisk_commit_write(struct file *file, struct page *page, unsigned offset, unsigned to)
-{
-       return 0;
-}
-
-static struct address_space_operations ramdisk_aops = {
-       readpage: ramdisk_readpage,
-       writepage: fail_writepage,
-       prepare_write: ramdisk_prepare_write,
-       commit_write: ramdisk_commit_write,
-};
-
-static int rd_blkdev_pagecache_IO(int rw, struct buffer_head * sbh, int minor)
-{
-       struct address_space * mapping;
-       unsigned long index;
-       int offset, size, err;
-
-       err = -EIO;
-       err = 0;
-       mapping = rd_bdev[minor]->bd_inode->i_mapping;
-
-       index = sbh->b_rsector >> (PAGE_CACHE_SHIFT - 9);
-       offset = (sbh->b_rsector << 9) & ~PAGE_CACHE_MASK;
-       size = sbh->b_size;
-
-       do {
-               int count;
-               struct page ** hash;
-               struct page * page;
-               char * src, * dst;
-               int unlock = 0;
-
-               count = PAGE_CACHE_SIZE - offset;
-               if (count > size)
-                       count = size;
-               size -= count;
-
-               hash = page_hash(mapping, index);
-               page = __find_get_page(mapping, index, hash);
-               if (!page) {
-                       page = grab_cache_page(mapping, index);
-                       err = -ENOMEM;
-                       if (!page)
-                               goto out;
-                       err = 0;
-
-                       if (!Page_Uptodate(page)) {
-                               memset(kmap(page), 0, PAGE_CACHE_SIZE);
-                               kunmap(page);
-                               SetPageUptodate(page);
-                       }
-
-                       unlock = 1;
-               }
-
-               index++;
-
-               if (rw == READ) {
-                       src = kmap(page);
-                       src += offset;
-                       dst = bh_kmap(sbh);
-               } else {
-                       dst = kmap(page);
-                       dst += offset;
-                       src = bh_kmap(sbh);
-               }
-               offset = 0;
-
-               memcpy(dst, src, count);
-
-               kunmap(page);
-               bh_kunmap(sbh);
-
-               if (rw == READ) {
-                       flush_dcache_page(page);
-               } else {
-                       SetPageDirty(page);
-               }
-               if (unlock)
-                       UnlockPage(page);
-               __free_page(page);
-       } while (size);
-
- out:
-       return err;
-}
-
-/*
- *  Basically, my strategy here is to set up a buffer-head which can't be
- *  deleted, and make that my Ramdisk.  If the request is outside of the
- *  allocated size, we must get rid of it...
- *
- * 19-JAN-1998  Richard Gooch <rgooch@atnf.csiro.au>  Added devfs support
- *
- */
-static int rd_make_request(request_queue_t * q, int rw, struct buffer_head *sbh)
-{
-       unsigned int minor;
-       unsigned long offset, len;
-
-       minor = MINOR(sbh->b_rdev);
-
-       if (minor >= NUM_RAMDISKS)
-               goto fail;
-
-       
-       offset = sbh->b_rsector << 9;
-       len = sbh->b_size;
-
-       if ((offset + len) > rd_length[minor])
-               goto fail;
-
-       if (rw==READA)
-               rw=READ;
-       if ((rw != READ) && (rw != WRITE)) {
-               printk(KERN_INFO "RAMDISK: bad command: %d\n", rw);
-               goto fail;
-       }
-
-       if (rd_blkdev_pagecache_IO(rw, sbh, minor))
-               goto fail;
-
-       sbh->b_end_io(sbh,1);
-       return 0;
- fail:
-       sbh->b_end_io(sbh,0);
-       return 0;
-} 
-
-static int rd_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
-{
-       int error = -EINVAL;
-       unsigned int minor;
-
-       if (!inode || !inode->i_rdev)   
-               goto out;
-
-       minor = MINOR(inode->i_rdev);
-
-       switch (cmd) {
-               case BLKFLSBUF:
-                       if (!capable(CAP_SYS_ADMIN))
-                               return -EACCES;
-                       /* special: we want to release the ramdisk memory,
-                          it's not like with the other blockdevices where
-                          this ioctl only flushes away the buffer cache. */
-                       error = -EBUSY;
-                       down(&inode->i_bdev->bd_sem);
-                       if (inode->i_bdev->bd_openers <= 2) {
-                               truncate_inode_pages(inode->i_mapping, 0);
-                               error = 0;
-                       }
-                       up(&inode->i_bdev->bd_sem);
-                       break;
-               case BLKGETSIZE:   /* Return device size */
-                       if (!arg)
-                               break;
-                       error = put_user(rd_kbsize[minor] << 1, (unsigned long *) arg);
-                       break;
-               case BLKGETSIZE64:
-                       error = put_user((u64)rd_kbsize[minor]<<10, (u64*)arg);
-                       break;
-               case BLKROSET:
-               case BLKROGET:
-               case BLKSSZGET:
-                       error = blk_ioctl(inode->i_rdev, cmd, arg);
-       };
-out:
-       return error;
-}
-
-
-#ifdef CONFIG_BLK_DEV_INITRD
-
-static ssize_t initrd_read(struct file *file, char *buf,
-                          size_t count, loff_t *ppos)
-{
-       int left;
-
-       left = initrd_end - initrd_start - *ppos;
-       if (count > left) count = left;
-       if (count == 0) return 0;
-       copy_to_user(buf, (char *)initrd_start + *ppos, count);
-       *ppos += count;
-       return count;
-}
-
-
-static int initrd_release(struct inode *inode,struct file *file)
-{
-       extern void free_initrd_mem(unsigned long, unsigned long);
-
-       lock_kernel();
-       if (!--initrd_users) {
-               free_initrd_mem(initrd_start, initrd_end);
-               initrd_start = 0;
-       }
-       unlock_kernel();
-       blkdev_put(inode->i_bdev, BDEV_FILE);
-       return 0;
-}
-
-
-static struct file_operations initrd_fops = {
-       read:           initrd_read,
-       release:        initrd_release,
-};
-
-#endif
-
-
-static int rd_open(struct inode * inode, struct file * filp)
-{
-       int unit = DEVICE_NR(inode->i_rdev);
-
-#ifdef CONFIG_BLK_DEV_INITRD
-       if (unit == INITRD_MINOR) {
-               if (!initrd_start) return -ENODEV;
-               initrd_users++;
-               filp->f_op = &initrd_fops;
-               return 0;
-       }
-#endif
-
-       if (unit >= NUM_RAMDISKS)
-               return -ENXIO;
-
-       /*
-        * Immunize device against invalidate_buffers() and prune_icache().
-        */
-       if (rd_bdev[unit] == NULL) {
-               rd_bdev[unit] = bdget(kdev_t_to_nr(inode->i_rdev));
-               rd_bdev[unit]->bd_openers++;
-               rd_bdev[unit]->bd_inode->i_mapping->a_ops = &ramdisk_aops;
-       }
-
-       return 0;
-}
-
-static struct block_device_operations rd_bd_op = {
-       owner:          THIS_MODULE,
-       open:           rd_open,
-       ioctl:          rd_ioctl,
-};
-
-#ifdef MODULE
-/* Before freeing the module, invalidate all of the protected buffers! */
-static void __exit rd_cleanup (void)
-{
-       int i;
-
-       for (i = 0 ; i < NUM_RAMDISKS; i++) {
-               struct block_device *bdev = rd_bdev[i];
-               rd_bdev[i] = NULL;
-               if (bdev)
-                       blkdev_put(bdev, BDEV_FILE);
-               destroy_buffers(MKDEV(MAJOR_NR, i));
-       }
-
-       devfs_unregister (devfs_handle);
-       unregister_blkdev( MAJOR_NR, "ramdisk" );
-       hardsect_size[MAJOR_NR] = NULL;
-       blksize_size[MAJOR_NR] = NULL;
-       blk_size[MAJOR_NR] = NULL;
-}
-#endif
-
-/* This is the registration and initialization section of the RAM disk driver */
-int __init rd_init (void)
-{
-       int             i;
-
-       if (rd_blocksize > PAGE_SIZE || rd_blocksize < 512 ||
-           (rd_blocksize & (rd_blocksize-1)))
-       {
-               printk("RAMDISK: wrong blocksize %d, reverting to defaults\n",
-                      rd_blocksize);
-               rd_blocksize = BLOCK_SIZE;
-       }
-
-       if (register_blkdev(MAJOR_NR, "ramdisk", &rd_bd_op)) {
-               printk("RAMDISK: Could not get major %d", MAJOR_NR);
-               return -EIO;
-       }
-
-       blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR), &rd_make_request);
-
-       for (i = 0; i < NUM_RAMDISKS; i++) {
-               /* rd_size is given in kB */
-               rd_length[i] = rd_size << 10;
-               rd_hardsec[i] = rd_blocksize;
-               rd_blocksizes[i] = rd_blocksize;
-               rd_kbsize[i] = rd_size;
-       }
-       devfs_handle = devfs_mk_dir (NULL, "rd", NULL);
-       devfs_register_series (devfs_handle, "%u", NUM_RAMDISKS,
-                              DEVFS_FL_DEFAULT, MAJOR_NR, 0,
-                              S_IFBLK | S_IRUSR | S_IWUSR,
-                              &rd_bd_op, NULL);
-
-       for (i = 0; i < NUM_RAMDISKS; i++)
-               register_disk(NULL, MKDEV(MAJOR_NR,i), 1, &rd_bd_op, rd_size<<1);
-
-#ifdef CONFIG_BLK_DEV_INITRD
-       /* We ought to separate initrd operations here */
-       register_disk(NULL, MKDEV(MAJOR_NR,INITRD_MINOR), 1, &rd_bd_op, rd_size<<1);
-#endif
-
-       hardsect_size[MAJOR_NR] = rd_hardsec;           /* Size of the RAM disk blocks */
-       blksize_size[MAJOR_NR] = rd_blocksizes;         /* Avoid set_blocksize() check */
-       blk_size[MAJOR_NR] = rd_kbsize;                 /* Size of the RAM disk in kB  */
-
-               /* rd_size is given in kB */
-       printk("RAMDISK driver initialized: "
-              "%d RAM disks of %dK size %d blocksize\n",
-              NUM_RAMDISKS, rd_size, rd_blocksize);
-
-       return 0;
-}
-
-#ifdef MODULE
-module_init(rd_init);
-module_exit(rd_cleanup);
-#endif
-
-/* loadable module support */
-MODULE_PARM     (rd_size, "1i");
-MODULE_PARM_DESC(rd_size, "Size of each RAM disk in kbytes.");
-MODULE_PARM     (rd_blocksize, "i");
-MODULE_PARM_DESC(rd_blocksize, "Blocksize of each RAM disk in bytes.");
-
-MODULE_LICENSE("GPL");
-
-/* End of non-loading portions of the RAM disk driver */
-
-#ifdef RD_LOADER 
-/*
- * This routine tries to find a RAM disk image to load, and returns the
- * number of blocks to read for a non-compressed image, 0 if the image
- * is a compressed image, and -1 if an image with the right magic
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
- *     minix
- *     ext2
- *     romfs
- *     gzip
- */
-static int __init 
-identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
-{
-       const int size = 512;
-       struct minix_super_block *minixsb;
-       struct ext2_super_block *ext2sb;
-       struct romfs_super_block *romfsb;
-       int nblocks = -1;
-       unsigned char *buf;
-
-       buf = kmalloc(size, GFP_KERNEL);
-       if (buf == 0)
-               return -1;
-
-       minixsb = (struct minix_super_block *) buf;
-       ext2sb = (struct ext2_super_block *) buf;
-       romfsb = (struct romfs_super_block *) buf;
-       memset(buf, 0xe5, size);
-
-       /*
-        * Read block 0 to test for gzipped kernel
-        */
-       if (fp->f_op->llseek)
-               fp->f_op->llseek(fp, start_block * BLOCK_SIZE, 0);
-       fp->f_pos = start_block * BLOCK_SIZE;
-       
-       fp->f_op->read(fp, buf, size, &fp->f_pos);
-
-       /*
-        * If it matches the gzip magic numbers, return -1
-        */
-       if (buf[0] == 037 && ((buf[1] == 0213) || (buf[1] == 0236))) {
-               printk(KERN_NOTICE
-                      "RAMDISK: Compressed image found at block %d\n",
-                      start_block);
-               nblocks = 0;
-               goto done;
-       }
-
-       /* romfs is at block zero too */
-       if (romfsb->word0 == ROMSB_WORD0 &&
-           romfsb->word1 == ROMSB_WORD1) {
-               printk(KERN_NOTICE
-                      "RAMDISK: romfs filesystem found at block %d\n",
-                      start_block);
-               nblocks = (ntohl(romfsb->size)+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-               goto done;
-       }
-
-       /*
-        * Read block 1 to test for minix and ext2 superblock
-        */
-       if (fp->f_op->llseek)
-               fp->f_op->llseek(fp, (start_block+1) * BLOCK_SIZE, 0);
-       fp->f_pos = (start_block+1) * BLOCK_SIZE;
-
-       fp->f_op->read(fp, buf, size, &fp->f_pos);
-               
-       /* Try minix */
-       if (minixsb->s_magic == MINIX_SUPER_MAGIC ||
-           minixsb->s_magic == MINIX_SUPER_MAGIC2) {
-               printk(KERN_NOTICE
-                      "RAMDISK: Minix filesystem found at block %d\n",
-                      start_block);
-               nblocks = minixsb->s_nzones << minixsb->s_log_zone_size;
-               goto done;
-       }
-
-       /* Try ext2 */
-       if (ext2sb->s_magic == cpu_to_le16(EXT2_SUPER_MAGIC)) {
-               printk(KERN_NOTICE
-                      "RAMDISK: ext2 filesystem found at block %d\n",
-                      start_block);
-               nblocks = le32_to_cpu(ext2sb->s_blocks_count);
-               goto done;
-       }
-
-       printk(KERN_NOTICE
-              "RAMDISK: Couldn't find valid RAM disk image starting at %d.\n",
-              start_block);
-       
-done:
-       if (fp->f_op->llseek)
-               fp->f_op->llseek(fp, start_block * BLOCK_SIZE, 0);
-       fp->f_pos = start_block * BLOCK_SIZE;   
-
-       kfree(buf);
-       return nblocks;
-}
-
-/*
- * This routine loads in the RAM disk image.
- */
-static void __init rd_load_image(kdev_t device, int offset, int unit)
-{
-       struct inode *inode, *out_inode;
-       struct file infile, outfile;
-       struct dentry in_dentry, out_dentry;
-       mm_segment_t fs;
-       kdev_t ram_device;
-       int nblocks, i;
-       char *buf;
-       unsigned short rotate = 0;
-       unsigned short devblocks = 0;
-#if !defined(CONFIG_ARCH_S390) && !defined(CONFIG_PPC_ISERIES) && !defined(CONFIG_XENO)
-       char rotator[4] = { '|' , '/' , '-' , '\\' };
-#endif
-       ram_device = MKDEV(MAJOR_NR, unit);
-
-       if ((inode = get_empty_inode()) == NULL)
-               return;
-       memset(&infile, 0, sizeof(infile));
-       memset(&in_dentry, 0, sizeof(in_dentry));
-       infile.f_mode = 1; /* read only */
-       infile.f_dentry = &in_dentry;
-       in_dentry.d_inode = inode;
-       infile.f_op = &def_blk_fops;
-       init_special_inode(inode, S_IFBLK | S_IRUSR, kdev_t_to_nr(device));
-
-       if ((out_inode = get_empty_inode()) == NULL)
-               goto free_inode;
-       memset(&outfile, 0, sizeof(outfile));
-       memset(&out_dentry, 0, sizeof(out_dentry));
-       outfile.f_mode = 3; /* read/write */
-       outfile.f_dentry = &out_dentry;
-       out_dentry.d_inode = out_inode;
-       outfile.f_op = &def_blk_fops;
-       init_special_inode(out_inode, S_IFBLK | S_IRUSR | S_IWUSR, kdev_t_to_nr(ram_device));
-
-       if (blkdev_open(inode, &infile) != 0) {
-               iput(out_inode);
-               goto free_inode;
-       }
-       if (blkdev_open(out_inode, &outfile) != 0)
-               goto free_inodes;
-
-       fs = get_fs();
-       set_fs(KERNEL_DS);
-       
-       nblocks = identify_ramdisk_image(device, &infile, offset);
-       if (nblocks < 0)
-               goto done;
-
-       if (nblocks == 0) {
-#ifdef BUILD_CRAMDISK
-               if (crd_load(&infile, &outfile) == 0)
-                       goto successful_load;
-#else
-               printk(KERN_NOTICE
-                      "RAMDISK: Kernel does not support compressed "
-                      "RAM disk images\n");
-#endif
-               goto done;
-       }
-
-       /*
-        * NOTE NOTE: nblocks suppose that the blocksize is BLOCK_SIZE, so
-        * rd_load_image will work only with filesystem BLOCK_SIZE wide!
-        * So make sure to use 1k blocksize while generating ext2fs
-        * ramdisk-images.
-        */
-       if (nblocks > (rd_length[unit] >> BLOCK_SIZE_BITS)) {
-               printk("RAMDISK: image too big! (%d/%ld blocks)\n",
-                      nblocks, rd_length[unit] >> BLOCK_SIZE_BITS);
-               goto done;
-       }
-               
-       /*
-        * OK, time to copy in the data
-        */
-       buf = kmalloc(BLOCK_SIZE, GFP_KERNEL);
-       if (buf == 0) {
-               printk(KERN_ERR "RAMDISK: could not allocate buffer\n");
-               goto done;
-       }
-
-       if (blk_size[MAJOR(device)])
-               devblocks = blk_size[MAJOR(device)][MINOR(device)];
-
-#ifdef CONFIG_BLK_DEV_INITRD
-       if (MAJOR(device) == MAJOR_NR && MINOR(device) == INITRD_MINOR)
-               devblocks = nblocks;
-#endif
-
-       if (devblocks == 0) {
-               printk(KERN_ERR "RAMDISK: could not determine device size\n");
-               goto done;
-       }
-
-       printk(KERN_NOTICE "RAMDISK: Loading %d blocks [%d disk%s] into ram disk... ", 
-               nblocks, ((nblocks-1)/devblocks)+1, nblocks>devblocks ? "s" : "");
-       for (i=0; i < nblocks; i++) {
-               if (i && (i % devblocks == 0)) {
-                       printk("done disk #%d.\n", i/devblocks);
-                       rotate = 0;
-                       if (infile.f_op->release(inode, &infile) != 0) {
-                               printk("Error closing the disk.\n");
-                               goto noclose_input;
-                       }
-                       printk("Please insert disk #%d and press ENTER\n", i/devblocks+1);
-                       wait_for_keypress();
-                       if (blkdev_open(inode, &infile) != 0)  {
-                               printk("Error opening disk.\n");
-                               goto noclose_input;
-                       }
-                       infile.f_pos = 0;
-                       printk("Loading disk #%d... ", i/devblocks+1);
-               }
-               infile.f_op->read(&infile, buf, BLOCK_SIZE, &infile.f_pos);
-               outfile.f_op->write(&outfile, buf, BLOCK_SIZE, &outfile.f_pos);
-#if !defined(CONFIG_ARCH_S390) && !defined(CONFIG_PPC_ISERIES) && !defined(CONFIG_XENO)
-               if (!(i % 16)) {
-                       printk("%c\b", rotator[rotate & 0x3]);
-                       rotate++;
-               }
-#endif
-       }
-       printk("done.\n");
-       kfree(buf);
-
-successful_load:
-       ROOT_DEV = MKDEV(MAJOR_NR, unit);
-       if (ROOT_DEVICE_NAME != NULL) strcpy (ROOT_DEVICE_NAME, "rd/0");
-
-done:
-       infile.f_op->release(inode, &infile);
-noclose_input:
-       blkdev_close(out_inode, &outfile);
-       iput(inode);
-       iput(out_inode);
-       set_fs(fs);
-       return;
-free_inodes: /* free inodes on error */ 
-       iput(out_inode);
-       infile.f_op->release(inode, &infile);
-free_inode:
-       iput(inode);
-}
-
-#ifdef CONFIG_MAC_FLOPPY
-int swim3_fd_eject(int devnum);
-#endif
-
-static void __init rd_load_disk(int n)
-{
-
-       if (rd_doload == 0)
-               return;
-
-       if (MAJOR(ROOT_DEV) != FLOPPY_MAJOR
-#ifdef CONFIG_BLK_DEV_INITRD
-               && MAJOR(real_root_dev) != FLOPPY_MAJOR
-#endif
-       )
-               return;
-
-       if (rd_prompt) {
-#ifdef CONFIG_BLK_DEV_FD
-               floppy_eject();
-#endif
-#ifdef CONFIG_MAC_FLOPPY
-               if(MAJOR(ROOT_DEV) == FLOPPY_MAJOR)
-                       swim3_fd_eject(MINOR(ROOT_DEV));
-               else if(MAJOR(real_root_dev) == FLOPPY_MAJOR)
-                       swim3_fd_eject(MINOR(real_root_dev));
-#endif
-               printk(KERN_NOTICE
-                      "VFS: Insert root floppy disk to be loaded into RAM disk and press ENTER\n");
-               wait_for_keypress();
-       }
-
-       rd_load_image(ROOT_DEV,rd_image_start, n);
-
-}
-
-void __init rd_load(void)
-{
-       rd_load_disk(0);
-}
-
-void __init rd_load_secondary(void)
-{
-       rd_load_disk(1);
-}
-
-#ifdef CONFIG_BLK_DEV_INITRD
-void __init initrd_load(void)
-{
-       rd_load_image(MKDEV(MAJOR_NR, INITRD_MINOR),rd_image_start,0);
-}
-#endif
-
-#endif /* RD_LOADER */
-
-#ifdef BUILD_CRAMDISK
-
-/*
- * gzip declarations
- */
-
-#define OF(args)  args
-
-#ifndef memzero
-#define memzero(s, n)     memset ((s), 0, (n))
-#endif
-
-typedef unsigned char  uch;
-typedef unsigned short ush;
-typedef unsigned long  ulg;
-
-#define INBUFSIZ 4096
-#define WSIZE 0x8000    /* window size--must be a power of two, and */
-                       /*  at least 32K for zip's deflate method */
-
-static uch *inbuf;
-static uch *window;
-
-static unsigned insize;  /* valid bytes in inbuf */
-static unsigned inptr;   /* index of next byte to be processed in inbuf */
-static unsigned outcnt;  /* bytes in output buffer */
-static int exit_code;
-static long bytes_out;
-static struct file *crd_infp, *crd_outfp;
-
-#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
-               
-/* Diagnostic functions (stubbed out) */
-#define Assert(cond,msg)
-#define Trace(x)
-#define Tracev(x)
-#define Tracevv(x)
-#define Tracec(c,x)
-#define Tracecv(c,x)
-
-#define STATIC static
-
-static int  fill_inbuf(void);
-static void flush_window(void);
-static void *malloc(int size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-#include "../../lib/inflate.c"
-
-static void __init *malloc(int size)
-{
-       return kmalloc(size, GFP_KERNEL);
-}
-
-static void __init free(void *where)
-{
-       kfree(where);
-}
-
-static void __init gzip_mark(void **ptr)
-{
-}
-
-static void __init gzip_release(void **ptr)
-{
-}
-
-
-/* ===========================================================================
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-static int __init fill_inbuf(void)
-{
-       if (exit_code) return -1;
-       
-       insize = crd_infp->f_op->read(crd_infp, inbuf, INBUFSIZ,
-                                     &crd_infp->f_pos);
-       if (insize == 0) return -1;
-
-       inptr = 1;
-
-       return inbuf[0];
-}
-
-/* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-static void __init flush_window(void)
-{
-    ulg c = crc;         /* temporary variable */
-    unsigned n;
-    uch *in, ch;
-    
-    crd_outfp->f_op->write(crd_outfp, window, outcnt, &crd_outfp->f_pos);
-    in = window;
-    for (n = 0; n < outcnt; n++) {
-           ch = *in++;
-           c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
-    }
-    crc = c;
-    bytes_out += (ulg)outcnt;
-    outcnt = 0;
-}
-
-static void __init error(char *x)
-{
-       printk(KERN_ERR "%s", x);
-       exit_code = 1;
-}
-
-static int __init 
-crd_load(struct file * fp, struct file *outfp)
-{
-       int result;
-
-       insize = 0;             /* valid bytes in inbuf */
-       inptr = 0;              /* index of next byte to be processed in inbuf */
-       outcnt = 0;             /* bytes in output buffer */
-       exit_code = 0;
-       bytes_out = 0;
-       crc = (ulg)0xffffffffL; /* shift register contents */
-
-       crd_infp = fp;
-       crd_outfp = outfp;
-       inbuf = kmalloc(INBUFSIZ, GFP_KERNEL);
-       if (inbuf == 0) {
-               printk(KERN_ERR "RAMDISK: Couldn't allocate gzip buffer\n");
-               return -1;
-       }
-       window = kmalloc(WSIZE, GFP_KERNEL);
-       if (window == 0) {
-               printk(KERN_ERR "RAMDISK: Couldn't allocate gzip window\n");
-               kfree(inbuf);
-               return -1;
-       }
-       makecrc();
-       result = gunzip();
-       kfree(inbuf);
-       kfree(window);
-       return result;
-}
-
-#endif  /* BUILD_CRAMDISK */
-
diff --git a/old/xenolinux-2.4.16-sparse/drivers/char/tty_io.c b/old/xenolinux-2.4.16-sparse/drivers/char/tty_io.c
deleted file mode 100644 (file)
index 1466b03..0000000
+++ /dev/null
@@ -1,2388 +0,0 @@
-/*
- *  linux/drivers/char/tty_io.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- */
-
-/*
- * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
- * or rs-channels. It also implements echoing, cooked mode etc.
- *
- * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
- *
- * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
- * tty_struct and tty_queue structures.  Previously there was an array
- * of 256 tty_struct's which was statically allocated, and the
- * tty_queue structures were allocated at boot time.  Both are now
- * dynamically allocated only when the tty is open.
- *
- * Also restructured routines so that there is more of a separation
- * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
- * the low-level tty routines (serial.c, pty.c, console.c).  This
- * makes for cleaner and more compact code.  -TYT, 9/17/92 
- *
- * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
- * which can be dynamically activated and de-activated by the line
- * discipline handling modules (like SLIP).
- *
- * NOTE: pay no attention to the line discipline code (yet); its
- * interface is still subject to change in this version...
- * -- TYT, 1/31/92
- *
- * Added functionality to the OPOST tty handling.  No delays, but all
- * other bits should be there.
- *     -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
- *
- * Rewrote canonical mode and added more termios flags.
- *     -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
- *
- * Reorganized FASYNC support so mouse code can share it.
- *     -- ctm@ardi.com, 9Sep95
- *
- * New TIOCLINUX variants added.
- *     -- mj@k332.feld.cvut.cz, 19-Nov-95
- * 
- * Restrict vt switching via ioctl()
- *      -- grif@cs.ucr.edu, 5-Dec-95
- *
- * Move console and virtual terminal code to more appropriate files,
- * implement CONFIG_VT and generalize console device interface.
- *     -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
- *
- * Rewrote init_dev and release_dev to eliminate races.
- *     -- Bill Hawes <whawes@star.net>, June 97
- *
- * Added devfs support.
- *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
- *
- * Added support for a Unix98-style ptmx device.
- *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
- *
- * Reduced memory usage for older ARM systems
- *      -- Russell King <rmk@arm.linux.org.uk>
- *
- * Move do_SAK() into process context.  Less stack use in devfs functions.
- * alloc_tty_struct() always uses kmalloc() -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
- */
-
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/major.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/fcntl.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/tty.h>
-#include <linux/tty_driver.h>
-#include <linux/tty_flip.h>
-#include <linux/devpts_fs.h>
-#include <linux/file.h>
-#include <linux/console.h>
-#include <linux/timer.h>
-#include <linux/ctype.h>
-#include <linux/kd.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/slab.h>
-#include <linux/poll.h>
-#include <linux/proc_fs.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/smp_lock.h>
-
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-
-#include <linux/kbd_kern.h>
-#include <linux/vt_kern.h>
-#include <linux/selection.h>
-#include <linux/devfs_fs_kernel.h>
-
-#include <linux/kmod.h>
-
-#ifdef CONFIG_XENO
-extern void xeno_console_init(void);
-#endif
-
-#ifdef CONFIG_VT
-extern void con_init_devfs (void);
-#endif
-
-#define CONSOLE_DEV MKDEV(TTY_MAJOR,0)
-#define TTY_DEV MKDEV(TTYAUX_MAJOR,0)
-#define SYSCONS_DEV MKDEV(TTYAUX_MAJOR,1)
-#define PTMX_DEV MKDEV(TTYAUX_MAJOR,2)
-
-#undef TTY_DEBUG_HANGUP
-
-#define TTY_PARANOIA_CHECK 1
-#define CHECK_TTY_COUNT 1
-
-struct termios tty_std_termios;                /* for the benefit of tty drivers  */
-struct tty_driver *tty_drivers;                /* linked list of tty drivers */
-struct tty_ldisc ldiscs[NR_LDISCS];    /* line disc dispatch table     */
-
-#ifdef CONFIG_UNIX98_PTYS
-extern struct tty_driver ptm_driver[]; /* Unix98 pty masters; for /dev/ptmx */
-extern struct tty_driver pts_driver[]; /* Unix98 pty slaves;  for /dev/ptmx */
-#endif
-
-/*
- * redirect is the pseudo-tty that console output
- * is redirected to if asked by TIOCCONS.
- */
-struct tty_struct * redirect;
-
-static void initialize_tty_struct(struct tty_struct *tty);
-
-static ssize_t tty_read(struct file *, char *, size_t, loff_t *);
-static ssize_t tty_write(struct file *, const char *, size_t, loff_t *);
-static unsigned int tty_poll(struct file *, poll_table *);
-static int tty_open(struct inode *, struct file *);
-static int tty_release(struct inode *, struct file *);
-int tty_ioctl(struct inode * inode, struct file * file,
-             unsigned int cmd, unsigned long arg);
-static int tty_fasync(int fd, struct file * filp, int on);
-extern int vme_scc_init (void);
-extern long vme_scc_console_init(void);
-extern int serial167_init(void);
-extern long serial167_console_init(void);
-extern void console_8xx_init(void);
-extern int rs_8xx_init(void);
-extern void mac_scc_console_init(void);
-extern void hwc_console_init(void);
-extern void hwc_tty_init(void);
-extern void con3215_init(void);
-extern void tty3215_init(void);
-extern void tub3270_con_init(void);
-extern void tub3270_init(void);
-extern void rs285_console_init(void);
-extern void sa1100_rs_console_init(void);
-extern void sgi_serial_console_init(void);
-extern void sci_console_init(void);
-extern void tx3912_console_init(void);
-extern void tx3912_rs_init(void);
-
-#ifndef MIN
-#define MIN(a,b)       ((a) < (b) ? (a) : (b))
-#endif
-#ifndef MAX
-#define MAX(a,b)       ((a) < (b) ? (b) : (a))
-#endif
-
-static struct tty_struct *alloc_tty_struct(void)
-{
-       struct tty_struct *tty;
-
-       tty = kmalloc(sizeof(struct tty_struct), GFP_KERNEL);
-       if (tty)
-               memset(tty, 0, sizeof(struct tty_struct));
-       return tty;
-}
-
-static inline void free_tty_struct(struct tty_struct *tty)
-{
-       kfree(tty);
-}
-
-/*
- * This routine returns the name of tty.
- */
-static char *
-_tty_make_name(struct tty_struct *tty, const char *name, char *buf)
-{
-       int idx = (tty)?MINOR(tty->device) - tty->driver.minor_start:0;
-
-       if (!tty) /* Hmm.  NULL pointer.  That's fun. */
-               strcpy(buf, "NULL tty");
-       else
-               sprintf(buf, name,
-                       idx + tty->driver.name_base);
-               
-       return buf;
-}
-
-#define TTY_NUMBER(tty) (MINOR((tty)->device) - (tty)->driver.minor_start + \
-                        (tty)->driver.name_base)
-
-char *tty_name(struct tty_struct *tty, char *buf)
-{
-       return _tty_make_name(tty, (tty)?tty->driver.name:NULL, buf);
-}
-
-inline int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
-                             const char *routine)
-{
-#ifdef TTY_PARANOIA_CHECK
-       static const char badmagic[] = KERN_WARNING
-               "Warning: bad magic number for tty struct (%s) in %s\n";
-       static const char badtty[] = KERN_WARNING
-               "Warning: null TTY for (%s) in %s\n";
-
-       if (!tty) {
-               printk(badtty, kdevname(device), routine);
-               return 1;
-       }
-       if (tty->magic != TTY_MAGIC) {
-               printk(badmagic, kdevname(device), routine);
-               return 1;
-       }
-#endif
-       return 0;
-}
-
-static int check_tty_count(struct tty_struct *tty, const char *routine)
-{
-#ifdef CHECK_TTY_COUNT
-       struct list_head *p;
-       int count = 0;
-       
-       file_list_lock();
-       for(p = tty->tty_files.next; p != &tty->tty_files; p = p->next) {
-               if(list_entry(p, struct file, f_list)->private_data == tty)
-                       count++;
-       }
-       file_list_unlock();
-       if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
-           tty->driver.subtype == PTY_TYPE_SLAVE &&
-           tty->link && tty->link->count)
-               count++;
-       if (tty->count != count) {
-               printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
-                                   "!= #fd's(%d) in %s\n",
-                      kdevname(tty->device), tty->count, count, routine);
-               return count;
-       }       
-#endif
-       return 0;
-}
-
-int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc)
-{
-       if (disc < N_TTY || disc >= NR_LDISCS)
-               return -EINVAL;
-       
-       if (new_ldisc) {
-               ldiscs[disc] = *new_ldisc;
-               ldiscs[disc].flags |= LDISC_FLAG_DEFINED;
-               ldiscs[disc].num = disc;
-       } else
-               memset(&ldiscs[disc], 0, sizeof(struct tty_ldisc));
-       
-       return 0;
-}
-
-EXPORT_SYMBOL(tty_register_ldisc);
-
-/* Set the discipline of a tty line. */
-static int tty_set_ldisc(struct tty_struct *tty, int ldisc)
-{
-       int     retval = 0;
-       struct  tty_ldisc o_ldisc;
-       char buf[64];
-
-       if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS))
-               return -EINVAL;
-       /* Eduardo Blanco <ejbs@cs.cs.com.uy> */
-       /* Cyrus Durgin <cider@speakeasy.org> */
-       if (!(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED)) {
-               char modname [20];
-               sprintf(modname, "tty-ldisc-%d", ldisc);
-               request_module (modname);
-       }
-       if (!(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED))
-               return -EINVAL;
-
-       if (tty->ldisc.num == ldisc)
-               return 0;       /* We are already in the desired discipline */
-       o_ldisc = tty->ldisc;
-
-       tty_wait_until_sent(tty, 0);
-       
-       /* Shutdown the current discipline. */
-       if (tty->ldisc.close)
-               (tty->ldisc.close)(tty);
-
-       /* Now set up the new line discipline. */
-       tty->ldisc = ldiscs[ldisc];
-       tty->termios->c_line = ldisc;
-       if (tty->ldisc.open)
-               retval = (tty->ldisc.open)(tty);
-       if (retval < 0) {
-               tty->ldisc = o_ldisc;
-               tty->termios->c_line = tty->ldisc.num;
-               if (tty->ldisc.open && (tty->ldisc.open(tty) < 0)) {
-                       tty->ldisc = ldiscs[N_TTY];
-                       tty->termios->c_line = N_TTY;
-                       if (tty->ldisc.open) {
-                               int r = tty->ldisc.open(tty);
-
-                               if (r < 0)
-                                       panic("Couldn't open N_TTY ldisc for "
-                                             "%s --- error %d.",
-                                             tty_name(tty, buf), r);
-                       }
-               }
-       }
-       if (tty->ldisc.num != o_ldisc.num && tty->driver.set_ldisc)
-               tty->driver.set_ldisc(tty);
-       return retval;
-}
-
-/*
- * This routine returns a tty driver structure, given a device number
- */
-struct tty_driver *get_tty_driver(kdev_t device)
-{
-       int     major, minor;
-       struct tty_driver *p;
-       
-       minor = MINOR(device);
-       major = MAJOR(device);
-
-       for (p = tty_drivers; p; p = p->next) {
-               if (p->major != major)
-                       continue;
-               if (minor < p->minor_start)
-                       continue;
-               if (minor >= p->minor_start + p->num)
-                       continue;
-               return p;
-       }
-       return NULL;
-}
-
-/*
- * If we try to write to, or set the state of, a terminal and we're
- * not in the foreground, send a SIGTTOU.  If the signal is blocked or
- * ignored, go ahead and perform the operation.  (POSIX 7.2)
- */
-int tty_check_change(struct tty_struct * tty)
-{
-       if (current->tty != tty)
-               return 0;
-       if (tty->pgrp <= 0) {
-               printk(KERN_WARNING "tty_check_change: tty->pgrp <= 0!\n");
-               return 0;
-       }
-       if (current->pgrp == tty->pgrp)
-               return 0;
-       if (is_ignored(SIGTTOU))
-               return 0;
-       if (is_orphaned_pgrp(current->pgrp))
-               return -EIO;
-       (void) kill_pg(current->pgrp,SIGTTOU,1);
-       return -ERESTARTSYS;
-}
-
-static ssize_t hung_up_tty_read(struct file * file, char * buf,
-                               size_t count, loff_t *ppos)
-{
-       /* Can't seek (pread) on ttys.  */
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
-       return 0;
-}
-
-static ssize_t hung_up_tty_write(struct file * file, const char * buf,
-                                size_t count, loff_t *ppos)
-{
-       /* Can't seek (pwrite) on ttys.  */
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
-       return -EIO;
-}
-
-/* No kernel lock held - none needed ;) */
-static unsigned int hung_up_tty_poll(struct file * filp, poll_table * wait)
-{
-       return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
-}
-
-static int hung_up_tty_ioctl(struct inode * inode, struct file * file,
-                            unsigned int cmd, unsigned long arg)
-{
-       return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
-}
-
-static struct file_operations tty_fops = {
-       llseek:         no_llseek,
-       read:           tty_read,
-       write:          tty_write,
-       poll:           tty_poll,
-       ioctl:          tty_ioctl,
-       open:           tty_open,
-       release:        tty_release,
-       fasync:         tty_fasync,
-};
-
-static struct file_operations hung_up_tty_fops = {
-       llseek:         no_llseek,
-       read:           hung_up_tty_read,
-       write:          hung_up_tty_write,
-       poll:           hung_up_tty_poll,
-       ioctl:          hung_up_tty_ioctl,
-       release:        tty_release,
-};
-
-/*
- * This can be called by the "eventd" kernel thread.  That is process synchronous,
- * but doesn't hold any locks, so we need to make sure we have the appropriate
- * locks for what we're doing..
- */
-void do_tty_hangup(void *data)
-{
-       struct tty_struct *tty = (struct tty_struct *) data;
-       struct file * cons_filp = NULL;
-       struct task_struct *p;
-       struct list_head *l;
-       int    closecount = 0, n;
-
-       if (!tty)
-               return;
-
-       /* inuse_filps is protected by the single kernel lock */
-       lock_kernel();
-       
-       check_tty_count(tty, "do_tty_hangup");
-       file_list_lock();
-       for (l = tty->tty_files.next; l != &tty->tty_files; l = l->next) {
-               struct file * filp = list_entry(l, struct file, f_list);
-               if (filp->f_dentry->d_inode->i_rdev == CONSOLE_DEV ||
-                   filp->f_dentry->d_inode->i_rdev == SYSCONS_DEV) {
-                       cons_filp = filp;
-                       continue;
-               }
-               if (filp->f_op != &tty_fops)
-                       continue;
-               closecount++;
-               tty_fasync(-1, filp, 0);        /* can't block */
-               filp->f_op = &hung_up_tty_fops;
-       }
-       file_list_unlock();
-       
-       /* FIXME! What are the locking issues here? This may me overdoing things.. */
-       {
-               unsigned long flags;
-
-               save_flags(flags); cli();
-               if (tty->ldisc.flush_buffer)
-                       tty->ldisc.flush_buffer(tty);
-               if (tty->driver.flush_buffer)
-                       tty->driver.flush_buffer(tty);
-               if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
-                   tty->ldisc.write_wakeup)
-                       (tty->ldisc.write_wakeup)(tty);
-               restore_flags(flags);
-       }
-
-       wake_up_interruptible(&tty->write_wait);
-       wake_up_interruptible(&tty->read_wait);
-
-       /*
-        * Shutdown the current line discipline, and reset it to
-        * N_TTY.
-        */
-       if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS)
-               *tty->termios = tty->driver.init_termios;
-       if (tty->ldisc.num != ldiscs[N_TTY].num) {
-               if (tty->ldisc.close)
-                       (tty->ldisc.close)(tty);
-               tty->ldisc = ldiscs[N_TTY];
-               tty->termios->c_line = N_TTY;
-               if (tty->ldisc.open) {
-                       int i = (tty->ldisc.open)(tty);
-                       if (i < 0)
-                               printk(KERN_ERR "do_tty_hangup: N_TTY open: "
-                                               "error %d\n", -i);
-               }
-       }
-       
-       read_lock(&tasklist_lock);
-       for_each_task(p) {
-               if ((tty->session > 0) && (p->session == tty->session) &&
-                   p->leader) {
-                       send_sig(SIGHUP,p,1);
-                       send_sig(SIGCONT,p,1);
-                       if (tty->pgrp > 0)
-                               p->tty_old_pgrp = tty->pgrp;
-               }
-               if (p->tty == tty)
-                       p->tty = NULL;
-       }
-       read_unlock(&tasklist_lock);
-
-       tty->flags = 0;
-       tty->session = 0;
-       tty->pgrp = -1;
-       tty->ctrl_status = 0;
-       /*
-        *      If one of the devices matches a console pointer, we
-        *      cannot just call hangup() because that will cause
-        *      tty->count and state->count to go out of sync.
-        *      So we just call close() the right number of times.
-        */
-       if (cons_filp) {
-               if (tty->driver.close)
-                       for (n = 0; n < closecount; n++)
-                               tty->driver.close(tty, cons_filp);
-       } else if (tty->driver.hangup)
-               (tty->driver.hangup)(tty);
-       unlock_kernel();
-}
-
-void tty_hangup(struct tty_struct * tty)
-{
-#ifdef TTY_DEBUG_HANGUP
-       char    buf[64];
-       
-       printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
-#endif
-       schedule_task(&tty->tq_hangup);
-}
-
-void tty_vhangup(struct tty_struct * tty)
-{
-#ifdef TTY_DEBUG_HANGUP
-       char    buf[64];
-
-       printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
-#endif
-       do_tty_hangup((void *) tty);
-}
-
-int tty_hung_up_p(struct file * filp)
-{
-       return (filp->f_op == &hung_up_tty_fops);
-}
-
-/*
- * This function is typically called only by the session leader, when
- * it wants to disassociate itself from its controlling tty.
- *
- * It performs the following functions:
- *     (1)  Sends a SIGHUP and SIGCONT to the foreground process group
- *     (2)  Clears the tty from being controlling the session
- *     (3)  Clears the controlling tty for all processes in the
- *             session group.
- *
- * The argument on_exit is set to 1 if called when a process is
- * exiting; it is 0 if called by the ioctl TIOCNOTTY.
- */
-void disassociate_ctty(int on_exit)
-{
-       struct tty_struct *tty = current->tty;
-       struct task_struct *p;
-       int tty_pgrp = -1;
-
-       if (tty) {
-               tty_pgrp = tty->pgrp;
-               if (on_exit && tty->driver.type != TTY_DRIVER_TYPE_PTY)
-                       tty_vhangup(tty);
-       } else {
-               if (current->tty_old_pgrp) {
-                       kill_pg(current->tty_old_pgrp, SIGHUP, on_exit);
-                       kill_pg(current->tty_old_pgrp, SIGCONT, on_exit);
-               }
-               return;
-       }
-       if (tty_pgrp > 0) {
-               kill_pg(tty_pgrp, SIGHUP, on_exit);
-               if (!on_exit)
-                       kill_pg(tty_pgrp, SIGCONT, on_exit);
-       }
-
-       current->tty_old_pgrp = 0;
-       tty->session = 0;
-       tty->pgrp = -1;
-
-       read_lock(&tasklist_lock);
-       for_each_task(p)
-               if (p->session == current->session)
-                       p->tty = NULL;
-       read_unlock(&tasklist_lock);
-}
-
-void wait_for_keypress(void)
-{
-        struct console *c = console_drivers;
-        if (c) c->wait_key(c);
-}
-
-void stop_tty(struct tty_struct *tty)
-{
-       if (tty->stopped)
-               return;
-       tty->stopped = 1;
-       if (tty->link && tty->link->packet) {
-               tty->ctrl_status &= ~TIOCPKT_START;
-               tty->ctrl_status |= TIOCPKT_STOP;
-               wake_up_interruptible(&tty->link->read_wait);
-       }
-       if (tty->driver.stop)
-               (tty->driver.stop)(tty);
-}
-
-void start_tty(struct tty_struct *tty)
-{
-       if (!tty->stopped || tty->flow_stopped)
-               return;
-       tty->stopped = 0;
-       if (tty->link && tty->link->packet) {
-               tty->ctrl_status &= ~TIOCPKT_STOP;
-               tty->ctrl_status |= TIOCPKT_START;
-               wake_up_interruptible(&tty->link->read_wait);
-       }
-       if (tty->driver.start)
-               (tty->driver.start)(tty);
-       if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
-           tty->ldisc.write_wakeup)
-               (tty->ldisc.write_wakeup)(tty);
-       wake_up_interruptible(&tty->write_wait);
-}
-
-static ssize_t tty_read(struct file * file, char * buf, size_t count, 
-                       loff_t *ppos)
-{
-       int i;
-       struct tty_struct * tty;
-       struct inode *inode;
-
-       /* Can't seek (pread) on ttys.  */
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
-
-       tty = (struct tty_struct *)file->private_data;
-       inode = file->f_dentry->d_inode;
-       if (tty_paranoia_check(tty, inode->i_rdev, "tty_read"))
-               return -EIO;
-       if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
-               return -EIO;
-
-       /* This check not only needs to be done before reading, but also
-          whenever read_chan() gets woken up after sleeping, so I've
-          moved it to there.  This should only be done for the N_TTY
-          line discipline, anyway.  Same goes for write_chan(). -- jlc. */
-#if 0
-       if ((inode->i_rdev != CONSOLE_DEV) && /* don't stop on /dev/console */
-           (tty->pgrp > 0) &&
-           (current->tty == tty) &&
-           (tty->pgrp != current->pgrp))
-               if (is_ignored(SIGTTIN) || is_orphaned_pgrp(current->pgrp))
-                       return -EIO;
-               else {
-                       (void) kill_pg(current->pgrp, SIGTTIN, 1);
-                       return -ERESTARTSYS;
-               }
-#endif
-       lock_kernel();
-       if (tty->ldisc.read)
-               i = (tty->ldisc.read)(tty,file,buf,count);
-       else
-               i = -EIO;
-       unlock_kernel();
-       if (i > 0)
-               inode->i_atime = CURRENT_TIME;
-       return i;
-}
-
-/*
- * Split writes up in sane blocksizes to avoid
- * denial-of-service type attacks
- */
-static inline ssize_t do_tty_write(
-       ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
-       struct tty_struct *tty,
-       struct file *file,
-       const unsigned char *buf,
-       size_t count)
-{
-       ssize_t ret = 0, written = 0;
-       
-       if (down_interruptible(&tty->atomic_write)) {
-               return -ERESTARTSYS;
-       }
-       if ( test_bit(TTY_NO_WRITE_SPLIT, &tty->flags) ) {
-               lock_kernel();
-               written = write(tty, file, buf, count);
-               unlock_kernel();
-       } else {
-               for (;;) {
-                       unsigned long size = MAX(PAGE_SIZE*2,16384);
-                       if (size > count)
-                               size = count;
-                       lock_kernel();
-                       ret = write(tty, file, buf, size);
-                       unlock_kernel();
-                       if (ret <= 0)
-                               break;
-                       written += ret;
-                       buf += ret;
-                       count -= ret;
-                       if (!count)
-                               break;
-                       ret = -ERESTARTSYS;
-                       if (signal_pending(current))
-                               break;
-                       if (current->need_resched)
-                               schedule();
-               }
-       }
-       if (written) {
-               file->f_dentry->d_inode->i_mtime = CURRENT_TIME;
-               ret = written;
-       }
-       up(&tty->atomic_write);
-       return ret;
-}
-
-
-static ssize_t tty_write(struct file * file, const char * buf, size_t count,
-                        loff_t *ppos)
-{
-       int is_console;
-       struct tty_struct * tty;
-       struct inode *inode;
-
-       /* Can't seek (pwrite) on ttys.  */
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
-
-       /*
-        *      For now, we redirect writes from /dev/console as
-        *      well as /dev/tty0.
-        */
-       inode = file->f_dentry->d_inode;
-       is_console = (inode->i_rdev == SYSCONS_DEV ||
-                     inode->i_rdev == CONSOLE_DEV);
-
-       if (is_console && redirect)
-               tty = redirect;
-       else
-               tty = (struct tty_struct *)file->private_data;
-       if (tty_paranoia_check(tty, inode->i_rdev, "tty_write"))
-               return -EIO;
-       if (!tty || !tty->driver.write || (test_bit(TTY_IO_ERROR, &tty->flags)))
-               return -EIO;
-#if 0
-       if (!is_console && L_TOSTOP(tty) && (tty->pgrp > 0) &&
-           (current->tty == tty) && (tty->pgrp != current->pgrp)) {
-               if (is_orphaned_pgrp(current->pgrp))
-                       return -EIO;
-               if (!is_ignored(SIGTTOU)) {
-                       (void) kill_pg(current->pgrp, SIGTTOU, 1);
-                       return -ERESTARTSYS;
-               }
-       }
-#endif
-       if (!tty->ldisc.write)
-               return -EIO;
-       return do_tty_write(tty->ldisc.write, tty, file,
-                           (const unsigned char *)buf, count);
-}
-
-/* Semaphore to protect creating and releasing a tty */
-static DECLARE_MUTEX(tty_sem);
-
-static void down_tty_sem(int index)
-{
-       down(&tty_sem);
-}
-
-static void up_tty_sem(int index)
-{
-       up(&tty_sem);
-}
-
-static void release_mem(struct tty_struct *tty, int idx);
-
-/*
- * WSH 06/09/97: Rewritten to remove races and properly clean up after a
- * failed open.  The new code protects the open with a semaphore, so it's
- * really quite straightforward.  The semaphore locking can probably be
- * relaxed for the (most common) case of reopening a tty.
- */
-static int init_dev(kdev_t device, struct tty_struct **ret_tty)
-{
-       struct tty_struct *tty, *o_tty;
-       struct termios *tp, **tp_loc, *o_tp, **o_tp_loc;
-       struct termios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
-       struct tty_driver *driver;      
-       int retval=0;
-       int idx;
-
-       driver = get_tty_driver(device);
-       if (!driver)
-               return -ENODEV;
-
-       idx = MINOR(device) - driver->minor_start;
-
-       /* 
-        * Check whether we need to acquire the tty semaphore to avoid
-        * race conditions.  For now, play it safe.
-        */
-       down_tty_sem(idx);
-
-       /* check whether we're reopening an existing tty */
-       tty = driver->table[idx];
-       if (tty) goto fast_track;
-
-       /*
-        * First time open is complex, especially for PTY devices.
-        * This code guarantees that either everything succeeds and the
-        * TTY is ready for operation, or else the table slots are vacated
-        * and the allocated memory released.  (Except that the termios 
-        * and locked termios may be retained.)
-        */
-
-       o_tty = NULL;
-       tp = o_tp = NULL;
-       ltp = o_ltp = NULL;
-
-       tty = alloc_tty_struct();
-       if(!tty)
-               goto fail_no_mem;
-       initialize_tty_struct(tty);
-       tty->device = device;
-       tty->driver = *driver;
-
-       tp_loc = &driver->termios[idx];
-       if (!*tp_loc) {
-               tp = (struct termios *) kmalloc(sizeof(struct termios),
-                                               GFP_KERNEL);
-               if (!tp)
-                       goto free_mem_out;
-               *tp = driver->init_termios;
-       }
-
-       ltp_loc = &driver->termios_locked[idx];
-       if (!*ltp_loc) {
-               ltp = (struct termios *) kmalloc(sizeof(struct termios),
-                                                GFP_KERNEL);
-               if (!ltp)
-                       goto free_mem_out;
-               memset(ltp, 0, sizeof(struct termios));
-       }
-
-       if (driver->type == TTY_DRIVER_TYPE_PTY) {
-               o_tty = alloc_tty_struct();
-               if (!o_tty)
-                       goto free_mem_out;
-               initialize_tty_struct(o_tty);
-               o_tty->device = (kdev_t) MKDEV(driver->other->major,
-                                       driver->other->minor_start + idx);
-               o_tty->driver = *driver->other;
-
-               o_tp_loc  = &driver->other->termios[idx];
-               if (!*o_tp_loc) {
-                       o_tp = (struct termios *)
-                               kmalloc(sizeof(struct termios), GFP_KERNEL);
-                       if (!o_tp)
-                               goto free_mem_out;
-                       *o_tp = driver->other->init_termios;
-               }
-
-               o_ltp_loc = &driver->other->termios_locked[idx];
-               if (!*o_ltp_loc) {
-                       o_ltp = (struct termios *)
-                               kmalloc(sizeof(struct termios), GFP_KERNEL);
-                       if (!o_ltp)
-                               goto free_mem_out;
-                       memset(o_ltp, 0, sizeof(struct termios));
-               }
-
-               /*
-                * Everything allocated ... set up the o_tty structure.
-                */
-               driver->other->table[idx] = o_tty;
-               if (!*o_tp_loc)
-                       *o_tp_loc = o_tp;
-               if (!*o_ltp_loc)
-                       *o_ltp_loc = o_ltp;
-               o_tty->termios = *o_tp_loc;
-               o_tty->termios_locked = *o_ltp_loc;
-               (*driver->other->refcount)++;
-               if (driver->subtype == PTY_TYPE_MASTER)
-                       o_tty->count++;
-
-               /* Establish the links in both directions */
-               tty->link   = o_tty;
-               o_tty->link = tty;
-       }
-
-       /* 
-        * All structures have been allocated, so now we install them.
-        * Failures after this point use release_mem to clean up, so 
-        * there's no need to null out the local pointers.
-        */
-       driver->table[idx] = tty;
-       
-       if (!*tp_loc)
-               *tp_loc = tp;
-       if (!*ltp_loc)
-               *ltp_loc = ltp;
-       tty->termios = *tp_loc;
-       tty->termios_locked = *ltp_loc;
-       (*driver->refcount)++;
-       tty->count++;
-
-       /* 
-        * Structures all installed ... call the ldisc open routines.
-        * If we fail here just call release_mem to clean up.  No need
-        * to decrement the use counts, as release_mem doesn't care.
-        */
-       if (tty->ldisc.open) {
-               retval = (tty->ldisc.open)(tty);
-               if (retval)
-                       goto release_mem_out;
-       }
-       if (o_tty && o_tty->ldisc.open) {
-               retval = (o_tty->ldisc.open)(o_tty);
-               if (retval) {
-                       if (tty->ldisc.close)
-                               (tty->ldisc.close)(tty);
-                       goto release_mem_out;
-               }
-       }
-       goto success;
-
-       /*
-        * This fast open can be used if the tty is already open.
-        * No memory is allocated, and the only failures are from
-        * attempting to open a closing tty or attempting multiple
-        * opens on a pty master.
-        */
-fast_track:
-       if (test_bit(TTY_CLOSING, &tty->flags)) {
-               retval = -EIO;
-               goto end_init;
-       }
-       if (driver->type == TTY_DRIVER_TYPE_PTY &&
-           driver->subtype == PTY_TYPE_MASTER) {
-               /*
-                * special case for PTY masters: only one open permitted, 
-                * and the slave side open count is incremented as well.
-                */
-               if (tty->count) {
-                       retval = -EIO;
-                       goto end_init;
-               }
-               tty->link->count++;
-       }
-       tty->count++;
-       tty->driver = *driver; /* N.B. why do this every time?? */
-
-success:
-       *ret_tty = tty;
-       
-       /* All paths come through here to release the semaphore */
-end_init:
-       up_tty_sem(idx);
-       return retval;
-
-       /* Release locally allocated memory ... nothing placed in slots */
-free_mem_out:
-       if (o_tp)
-               kfree(o_tp);
-       if (o_tty)
-               free_tty_struct(o_tty);
-       if (ltp)
-               kfree(ltp);
-       if (tp)
-               kfree(tp);
-       free_tty_struct(tty);
-
-fail_no_mem:
-       retval = -ENOMEM;
-       goto end_init;
-
-       /* call the tty release_mem routine to clean out this slot */
-release_mem_out:
-       printk(KERN_INFO "init_dev: ldisc open failed, "
-                        "clearing slot %d\n", idx);
-       release_mem(tty, idx);
-       goto end_init;
-}
-
-/*
- * Releases memory associated with a tty structure, and clears out the
- * driver table slots.
- */
-static void release_mem(struct tty_struct *tty, int idx)
-{
-       struct tty_struct *o_tty;
-       struct termios *tp;
-
-       if ((o_tty = tty->link) != NULL) {
-               o_tty->driver.table[idx] = NULL;
-               if (o_tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
-                       tp = o_tty->driver.termios[idx];
-                       o_tty->driver.termios[idx] = NULL;
-                       kfree(tp);
-               }
-               o_tty->magic = 0;
-               (*o_tty->driver.refcount)--;
-               list_del(&o_tty->tty_files);
-               free_tty_struct(o_tty);
-       }
-
-       tty->driver.table[idx] = NULL;
-       if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
-               tp = tty->driver.termios[idx];
-               tty->driver.termios[idx] = NULL;
-               kfree(tp);
-       }
-       tty->magic = 0;
-       (*tty->driver.refcount)--;
-       list_del(&tty->tty_files);
-       free_tty_struct(tty);
-}
-
-/*
- * Even releasing the tty structures is a tricky business.. We have
- * to be very careful that the structures are all released at the
- * same time, as interrupts might otherwise get the wrong pointers.
- *
- * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
- * lead to double frees or releasing memory still in use.
- */
-static void release_dev(struct file * filp)
-{
-       struct tty_struct *tty, *o_tty;
-       int     pty_master, tty_closing, o_tty_closing, do_sleep;
-       int     idx;
-       char    buf[64];
-       
-       tty = (struct tty_struct *)filp->private_data;
-       if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "release_dev"))
-               return;
-
-       check_tty_count(tty, "release_dev");
-
-       tty_fasync(-1, filp, 0);
-
-       idx = MINOR(tty->device) - tty->driver.minor_start;
-       pty_master = (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
-                     tty->driver.subtype == PTY_TYPE_MASTER);
-       o_tty = tty->link;
-
-#ifdef TTY_PARANOIA_CHECK
-       if (idx < 0 || idx >= tty->driver.num) {
-               printk(KERN_DEBUG "release_dev: bad idx when trying to "
-                                 "free (%s)\n", kdevname(tty->device));
-               return;
-       }
-       if (tty != tty->driver.table[idx]) {
-               printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
-                                 "for (%s)\n", idx, kdevname(tty->device));
-               return;
-       }
-       if (tty->termios != tty->driver.termios[idx]) {
-               printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
-                      "for (%s)\n",
-                      idx, kdevname(tty->device));
-               return;
-       }
-       if (tty->termios_locked != tty->driver.termios_locked[idx]) {
-               printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
-                      "termios_locked for (%s)\n",
-                      idx, kdevname(tty->device));
-               return;
-       }
-#endif
-
-#ifdef TTY_DEBUG_HANGUP
-       printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
-              tty_name(tty, buf), tty->count);
-#endif
-
-#ifdef TTY_PARANOIA_CHECK
-       if (tty->driver.other) {
-               if (o_tty != tty->driver.other->table[idx]) {
-                       printk(KERN_DEBUG "release_dev: other->table[%d] "
-                                         "not o_tty for (%s)\n",
-                              idx, kdevname(tty->device));
-                       return;
-               }
-               if (o_tty->termios != tty->driver.other->termios[idx]) {
-                       printk(KERN_DEBUG "release_dev: other->termios[%d] "
-                                         "not o_termios for (%s)\n",
-                              idx, kdevname(tty->device));
-                       return;
-               }
-               if (o_tty->termios_locked != 
-                     tty->driver.other->termios_locked[idx]) {
-                       printk(KERN_DEBUG "release_dev: other->termios_locked["
-                                         "%d] not o_termios_locked for (%s)\n",
-                              idx, kdevname(tty->device));
-                       return;
-               }
-               if (o_tty->link != tty) {
-                       printk(KERN_DEBUG "release_dev: bad pty pointers\n");
-                       return;
-               }
-       }
-#endif
-
-       if (tty->driver.close)
-               tty->driver.close(tty, filp);
-
-       /*
-        * Sanity check: if tty->count is going to zero, there shouldn't be
-        * any waiters on tty->read_wait or tty->write_wait.  We test the
-        * wait queues and kick everyone out _before_ actually starting to
-        * close.  This ensures that we won't block while releasing the tty
-        * structure.
-        *
-        * The test for the o_tty closing is necessary, since the master and
-        * slave sides may close in any order.  If the slave side closes out
-        * first, its count will be one, since the master side holds an open.
-        * Thus this test wouldn't be triggered at the time the slave closes,
-        * so we do it now.
-        *
-        * Note that it's possible for the tty to be opened again while we're
-        * flushing out waiters.  By recalculating the closing flags before
-        * each iteration we avoid any problems.
-        */
-       while (1) {
-               tty_closing = tty->count <= 1;
-               o_tty_closing = o_tty &&
-                       (o_tty->count <= (pty_master ? 1 : 0));
-               do_sleep = 0;
-
-               if (tty_closing) {
-                       if (waitqueue_active(&tty->read_wait)) {
-                               wake_up(&tty->read_wait);
-                               do_sleep++;
-                       }
-                       if (waitqueue_active(&tty->write_wait)) {
-                               wake_up(&tty->write_wait);
-                               do_sleep++;
-                       }
-               }
-               if (o_tty_closing) {
-                       if (waitqueue_active(&o_tty->read_wait)) {
-                               wake_up(&o_tty->read_wait);
-                               do_sleep++;
-                       }
-                       if (waitqueue_active(&o_tty->write_wait)) {
-                               wake_up(&o_tty->write_wait);
-                               do_sleep++;
-                       }
-               }
-               if (!do_sleep)
-                       break;
-
-               printk(KERN_WARNING "release_dev: %s: read/write wait queue "
-                                   "active!\n", tty_name(tty, buf));
-               schedule();
-       }       
-
-       /*
-        * The closing flags are now consistent with the open counts on 
-        * both sides, and we've completed the last operation that could 
-        * block, so it's safe to proceed with closing.
-        */
-       if (pty_master) {
-               if (--o_tty->count < 0) {
-                       printk(KERN_WARNING "release_dev: bad pty slave count "
-                                           "(%d) for %s\n",
-                              o_tty->count, tty_name(o_tty, buf));
-                       o_tty->count = 0;
-               }
-       }
-       if (--tty->count < 0) {
-               printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n",
-                      tty->count, tty_name(tty, buf));
-               tty->count = 0;
-       }
-
-       /*
-        * We've decremented tty->count, so we should zero out
-        * filp->private_data, to break the link between the tty and
-        * the file descriptor.  Otherwise if filp_close() blocks before
-        * the file descriptor is removed from the inuse_filp
-        * list, check_tty_count() could observe a discrepancy and
-        * printk a warning message to the user.
-        */
-       filp->private_data = 0;
-
-       /*
-        * Perform some housekeeping before deciding whether to return.
-        *
-        * Set the TTY_CLOSING flag if this was the last open.  In the
-        * case of a pty we may have to wait around for the other side
-        * to close, and TTY_CLOSING makes sure we can't be reopened.
-        */
-       if(tty_closing)
-               set_bit(TTY_CLOSING, &tty->flags);
-       if(o_tty_closing)
-               set_bit(TTY_CLOSING, &o_tty->flags);
-
-       /*
-        * If _either_ side is closing, make sure there aren't any
-        * processes that still think tty or o_tty is their controlling
-        * tty.  Also, clear redirect if it points to either tty.
-        */
-       if (tty_closing || o_tty_closing) {
-               struct task_struct *p;
-
-               read_lock(&tasklist_lock);
-               for_each_task(p) {
-                       if (p->tty == tty || (o_tty && p->tty == o_tty))
-                               p->tty = NULL;
-               }
-               read_unlock(&tasklist_lock);
-
-               if (redirect == tty || (o_tty && redirect == o_tty))
-                       redirect = NULL;
-       }
-
-       /* check whether both sides are closing ... */
-       if (!tty_closing || (o_tty && !o_tty_closing))
-               return;
-       
-#ifdef TTY_DEBUG_HANGUP
-       printk(KERN_DEBUG "freeing tty structure...");
-#endif
-
-       /*
-        * Shutdown the current line discipline, and reset it to N_TTY.
-        * N.B. why reset ldisc when we're releasing the memory??
-        */
-       if (tty->ldisc.close)
-               (tty->ldisc.close)(tty);
-       tty->ldisc = ldiscs[N_TTY];
-       tty->termios->c_line = N_TTY;
-       if (o_tty) {
-               if (o_tty->ldisc.close)
-                       (o_tty->ldisc.close)(o_tty);
-               o_tty->ldisc = ldiscs[N_TTY];
-       }
-       
-       /*
-        * Make sure that the tty's task queue isn't activated. 
-        */
-       run_task_queue(&tq_timer);
-       flush_scheduled_tasks();
-
-       /* 
-        * The release_mem function takes care of the details of clearing
-        * the slots and preserving the termios structure.
-        */
-       release_mem(tty, idx);
-}
-
-/*
- * tty_open and tty_release keep up the tty count that contains the
- * number of opens done on a tty. We cannot use the inode-count, as
- * different inodes might point to the same tty.
- *
- * Open-counting is needed for pty masters, as well as for keeping
- * track of serial lines: DTR is dropped when the last close happens.
- * (This is not done solely through tty->count, now.  - Ted 1/27/92)
- *
- * The termios state of a pty is reset on first open so that
- * settings don't persist across reuse.
- */
-static int tty_open(struct inode * inode, struct file * filp)
-{
-       struct tty_struct *tty;
-       int noctty, retval;
-       kdev_t device;
-       unsigned short saved_flags;
-       char    buf[64];
-
-       saved_flags = filp->f_flags;
-retry_open:
-       noctty = filp->f_flags & O_NOCTTY;
-       device = inode->i_rdev;
-       if (device == TTY_DEV) {
-               if (!current->tty)
-                       return -ENXIO;
-               device = current->tty->device;
-               filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
-               /* noctty = 1; */
-       }
-#ifdef CONFIG_VT
-       if (device == CONSOLE_DEV) {
-               extern int fg_console;
-               device = MKDEV(TTY_MAJOR, fg_console + 1);
-               noctty = 1;
-       }
-#endif
-       if (device == SYSCONS_DEV) {
-               struct console *c = console_drivers;
-               while(c && !c->device)
-                       c = c->next;
-               if (!c)
-                        return -ENODEV;
-                device = c->device(c);
-               filp->f_flags |= O_NONBLOCK; /* Don't let /dev/console block */
-               noctty = 1;
-       }
-
-       if (device == PTMX_DEV) {
-#ifdef CONFIG_UNIX98_PTYS
-
-               /* find a free pty. */
-               int major, minor;
-               struct tty_driver *driver;
-
-               /* find a device that is not in use. */
-               retval = -1;
-               for ( major = 0 ; major < UNIX98_NR_MAJORS ; major++ ) {
-                       driver = &ptm_driver[major];
-                       for (minor = driver->minor_start ;
-                            minor < driver->minor_start + driver->num ;
-                            minor++) {
-                               device = MKDEV(driver->major, minor);
-                               if (!init_dev(device, &tty)) goto ptmx_found; /* ok! */
-                       }
-               }
-               return -EIO; /* no free ptys */
-       ptmx_found:
-               set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
-               minor -= driver->minor_start;
-               devpts_pty_new(driver->other->name_base + minor, MKDEV(driver->other->major, minor + driver->other->minor_start));
-               tty_register_devfs(&pts_driver[major], DEVFS_FL_NO_PERSISTENCE,
-                                  pts_driver[major].minor_start + minor);
-               noctty = 1;
-               goto init_dev_done;
-
-#else   /* CONFIG_UNIX_98_PTYS */
-
-               return -ENODEV;
-
-#endif  /* CONFIG_UNIX_98_PTYS */
-       }
-
-       retval = init_dev(device, &tty);
-       if (retval)
-               return retval;
-
-#ifdef CONFIG_UNIX98_PTYS
-init_dev_done:
-#endif
-       filp->private_data = tty;
-       file_move(filp, &tty->tty_files);
-       check_tty_count(tty, "tty_open");
-       if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
-           tty->driver.subtype == PTY_TYPE_MASTER)
-               noctty = 1;
-#ifdef TTY_DEBUG_HANGUP
-       printk(KERN_DEBUG "opening %s...", tty_name(tty, buf));
-#endif
-       if (tty->driver.open)
-               retval = tty->driver.open(tty, filp);
-       else
-               retval = -ENODEV;
-       filp->f_flags = saved_flags;
-
-       if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) && !suser())
-               retval = -EBUSY;
-
-       if (retval) {
-#ifdef TTY_DEBUG_HANGUP
-               printk(KERN_DEBUG "error %d in opening %s...", retval,
-                      tty_name(tty, buf));
-#endif
-
-               release_dev(filp);
-               if (retval != -ERESTARTSYS)
-                       return retval;
-               if (signal_pending(current))
-                       return retval;
-               schedule();
-               /*
-                * Need to reset f_op in case a hangup happened.
-                */
-               filp->f_op = &tty_fops;
-               goto retry_open;
-       }
-       if (!noctty &&
-           current->leader &&
-           !current->tty &&
-           tty->session == 0) {
-               task_lock(current);
-               current->tty = tty;
-               task_unlock(current);
-               current->tty_old_pgrp = 0;
-               tty->session = current->session;
-               tty->pgrp = current->pgrp;
-       }
-       if ((tty->driver.type == TTY_DRIVER_TYPE_SERIAL) &&
-           (tty->driver.subtype == SERIAL_TYPE_CALLOUT) &&
-           (tty->count == 1)) {
-               static int nr_warns;
-               if (nr_warns < 5) {
-                       printk(KERN_WARNING "tty_io.c: "
-                               "process %d (%s) used obsolete /dev/%s - "
-                               "update software to use /dev/ttyS%d\n",
-                               current->pid, current->comm,
-                               tty_name(tty, buf), TTY_NUMBER(tty));
-                       nr_warns++;
-               }
-       }
-       return 0;
-}
-
-static int tty_release(struct inode * inode, struct file * filp)
-{
-       lock_kernel();
-       release_dev(filp);
-       unlock_kernel();
-       return 0;
-}
-
-/* No kernel lock held - fine */
-static unsigned int tty_poll(struct file * filp, poll_table * wait)
-{
-       struct tty_struct * tty;
-
-       tty = (struct tty_struct *)filp->private_data;
-       if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_poll"))
-               return 0;
-
-       if (tty->ldisc.poll)
-               return (tty->ldisc.poll)(tty, filp, wait);
-       return 0;
-}
-
-static int tty_fasync(int fd, struct file * filp, int on)
-{
-       struct tty_struct * tty;
-       int retval;
-
-       tty = (struct tty_struct *)filp->private_data;
-       if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_fasync"))
-               return 0;
-       
-       retval = fasync_helper(fd, filp, on, &tty->fasync);
-       if (retval <= 0)
-               return retval;
-
-       if (on) {
-               if (!waitqueue_active(&tty->read_wait))
-                       tty->minimum_to_wake = 1;
-               if (filp->f_owner.pid == 0) {
-                       filp->f_owner.pid = (-tty->pgrp) ? : current->pid;
-                       filp->f_owner.uid = current->uid;
-                       filp->f_owner.euid = current->euid;
-               }
-       } else {
-               if (!tty->fasync && !waitqueue_active(&tty->read_wait))
-                       tty->minimum_to_wake = N_TTY_BUF_SIZE;
-       }
-       return 0;
-}
-
-static int tiocsti(struct tty_struct *tty, char * arg)
-{
-       char ch, mbz = 0;
-
-       if ((current->tty != tty) && !suser())
-               return -EPERM;
-       if (get_user(ch, arg))
-               return -EFAULT;
-       tty->ldisc.receive_buf(tty, &ch, &mbz, 1);
-       return 0;
-}
-
-static int tiocgwinsz(struct tty_struct *tty, struct winsize * arg)
-{
-       if (copy_to_user(arg, &tty->winsize, sizeof(*arg)))
-               return -EFAULT;
-       return 0;
-}
-
-static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
-       struct winsize * arg)
-{
-       struct winsize tmp_ws;
-
-       if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
-               return -EFAULT;
-       if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
-               return 0;
-       if (tty->pgrp > 0)
-               kill_pg(tty->pgrp, SIGWINCH, 1);
-       if ((real_tty->pgrp != tty->pgrp) && (real_tty->pgrp > 0))
-               kill_pg(real_tty->pgrp, SIGWINCH, 1);
-       tty->winsize = tmp_ws;
-       real_tty->winsize = tmp_ws;
-       return 0;
-}
-
-static int tioccons(struct inode *inode,
-       struct tty_struct *tty, struct tty_struct *real_tty)
-{
-       if (inode->i_rdev == SYSCONS_DEV ||
-           inode->i_rdev == CONSOLE_DEV) {
-               if (!suser())
-                       return -EPERM;
-               redirect = NULL;
-               return 0;
-       }
-       if (redirect)
-               return -EBUSY;
-       redirect = real_tty;
-       return 0;
-}
-
-
-static int fionbio(struct file *file, int *arg)
-{
-       int nonblock;
-
-       if (get_user(nonblock, arg))
-               return -EFAULT;
-
-       if (nonblock)
-               file->f_flags |= O_NONBLOCK;
-       else
-               file->f_flags &= ~O_NONBLOCK;
-       return 0;
-}
-
-static int tiocsctty(struct tty_struct *tty, int arg)
-{
-       if (current->leader &&
-           (current->session == tty->session))
-               return 0;
-       /*
-        * The process must be a session leader and
-        * not have a controlling tty already.
-        */
-       if (!current->leader || current->tty)
-               return -EPERM;
-       if (tty->session > 0) {
-               /*
-                * This tty is already the controlling
-                * tty for another session group!
-                */
-               if ((arg == 1) && suser()) {
-                       /*
-                        * Steal it away
-                        */
-                       struct task_struct *p;
-
-                       read_lock(&tasklist_lock);
-                       for_each_task(p)
-                               if (p->tty == tty)
-                                       p->tty = NULL;
-                       read_unlock(&tasklist_lock);
-               } else
-                       return -EPERM;
-       }
-       task_lock(current);
-       current->tty = tty;
-       task_unlock(current);
-       current->tty_old_pgrp = 0;
-       tty->session = current->session;
-       tty->pgrp = current->pgrp;
-       return 0;
-}
-
-static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
-{
-       /*
-        * (tty == real_tty) is a cheap way of
-        * testing if the tty is NOT a master pty.
-        */
-       if (tty == real_tty && current->tty != real_tty)
-               return -ENOTTY;
-       return put_user(real_tty->pgrp, arg);
-}
-
-static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
-{
-       pid_t pgrp;
-       int retval = tty_check_change(real_tty);
-
-       if (retval == -EIO)
-               return -ENOTTY;
-       if (retval)
-               return retval;
-       if (!current->tty ||
-           (current->tty != real_tty) ||
-           (real_tty->session != current->session))
-               return -ENOTTY;
-       if (get_user(pgrp, (pid_t *) arg))
-               return -EFAULT;
-       if (pgrp < 0)
-               return -EINVAL;
-       if (session_of_pgrp(pgrp) != current->session)
-               return -EPERM;
-       real_tty->pgrp = pgrp;
-       return 0;
-}
-
-static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
-{
-       /*
-        * (tty == real_tty) is a cheap way of
-        * testing if the tty is NOT a master pty.
-       */
-       if (tty == real_tty && current->tty != real_tty)
-               return -ENOTTY;
-       if (real_tty->session <= 0)
-               return -ENOTTY;
-       return put_user(real_tty->session, arg);
-}
-
-static int tiocttygstruct(struct tty_struct *tty, struct tty_struct *arg)
-{
-       if (copy_to_user(arg, tty, sizeof(*arg)))
-               return -EFAULT;
-       return 0;
-}
-
-static int tiocsetd(struct tty_struct *tty, int *arg)
-{
-       int ldisc;
-
-       if (get_user(ldisc, arg))
-               return -EFAULT;
-       return tty_set_ldisc(tty, ldisc);
-}
-
-static int send_break(struct tty_struct *tty, int duration)
-{
-       set_current_state(TASK_INTERRUPTIBLE);
-
-       tty->driver.break_ctl(tty, -1);
-       if (!signal_pending(current))
-               schedule_timeout(duration);
-       tty->driver.break_ctl(tty, 0);
-       if (signal_pending(current))
-               return -EINTR;
-       return 0;
-}
-
-/*
- * Split this up, as gcc can choke on it otherwise..
- */
-int tty_ioctl(struct inode * inode, struct file * file,
-             unsigned int cmd, unsigned long arg)
-{
-       struct tty_struct *tty, *real_tty;
-       int retval;
-       
-       tty = (struct tty_struct *)file->private_data;
-       if (tty_paranoia_check(tty, inode->i_rdev, "tty_ioctl"))
-               return -EINVAL;
-
-       real_tty = tty;
-       if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
-           tty->driver.subtype == PTY_TYPE_MASTER)
-               real_tty = tty->link;
-
-       /*
-        * Break handling by driver
-        */
-       if (!tty->driver.break_ctl) {
-               switch(cmd) {
-               case TIOCSBRK:
-               case TIOCCBRK:
-                       if (tty->driver.ioctl)
-                               return tty->driver.ioctl(tty, file, cmd, arg);
-                       return -EINVAL;
-                       
-               /* These two ioctl's always return success; even if */
-               /* the driver doesn't support them. */
-               case TCSBRK:
-               case TCSBRKP:
-                       if (!tty->driver.ioctl)
-                               return 0;
-                       retval = tty->driver.ioctl(tty, file, cmd, arg);
-                       if (retval == -ENOIOCTLCMD)
-                               retval = 0;
-                       return retval;
-               }
-       }
-
-       /*
-        * Factor out some common prep work
-        */
-       switch (cmd) {
-       case TIOCSETD:
-       case TIOCSBRK:
-       case TIOCCBRK:
-       case TCSBRK:
-       case TCSBRKP:                   
-               retval = tty_check_change(tty);
-               if (retval)
-                       return retval;
-               if (cmd != TIOCCBRK) {
-                       tty_wait_until_sent(tty, 0);
-                       if (signal_pending(current))
-                               return -EINTR;
-               }
-               break;
-       }
-
-       switch (cmd) {
-               case TIOCSTI:
-                       return tiocsti(tty, (char *)arg);
-               case TIOCGWINSZ:
-                       return tiocgwinsz(tty, (struct winsize *) arg);
-               case TIOCSWINSZ:
-                       return tiocswinsz(tty, real_tty, (struct winsize *) arg);
-               case TIOCCONS:
-                       return tioccons(inode, tty, real_tty);
-               case FIONBIO:
-                       return fionbio(file, (int *) arg);
-               case TIOCEXCL:
-                       set_bit(TTY_EXCLUSIVE, &tty->flags);
-                       return 0;
-               case TIOCNXCL:
-                       clear_bit(TTY_EXCLUSIVE, &tty->flags);
-                       return 0;
-               case TIOCNOTTY:
-                       if (current->tty != tty)
-                               return -ENOTTY;
-                       if (current->leader)
-                               disassociate_ctty(0);
-                       task_lock(current);
-                       current->tty = NULL;
-                       task_unlock(current);
-                       return 0;
-               case TIOCSCTTY:
-                       return tiocsctty(tty, arg);
-               case TIOCGPGRP:
-                       return tiocgpgrp(tty, real_tty, (pid_t *) arg);
-               case TIOCSPGRP:
-                       return tiocspgrp(tty, real_tty, (pid_t *) arg);
-               case TIOCGSID:
-                       return tiocgsid(tty, real_tty, (pid_t *) arg);
-               case TIOCGETD:
-                       return put_user(tty->ldisc.num, (int *) arg);
-               case TIOCSETD:
-                       return tiocsetd(tty, (int *) arg);
-#ifdef CONFIG_VT
-               case TIOCLINUX:
-                       return tioclinux(tty, arg);
-#endif
-               case TIOCTTYGSTRUCT:
-                       return tiocttygstruct(tty, (struct tty_struct *) arg);
-
-               /*
-                * Break handling
-                */
-               case TIOCSBRK:  /* Turn break on, unconditionally */
-                       tty->driver.break_ctl(tty, -1);
-                       return 0;
-                       
-               case TIOCCBRK:  /* Turn break off, unconditionally */
-                       tty->driver.break_ctl(tty, 0);
-                       return 0;
-               case TCSBRK:   /* SVID version: non-zero arg --> no break */
-                       /*
-                        * XXX is the above comment correct, or the
-                        * code below correct?  Is this ioctl used at
-                        * all by anyone?
-                        */
-                       if (!arg)
-                               return send_break(tty, HZ/4);
-                       return 0;
-               case TCSBRKP:   /* support for POSIX tcsendbreak() */   
-                       return send_break(tty, arg ? arg*(HZ/10) : HZ/4);
-       }
-       if (tty->driver.ioctl) {
-               int retval = (tty->driver.ioctl)(tty, file, cmd, arg);
-               if (retval != -ENOIOCTLCMD)
-                       return retval;
-       }
-       if (tty->ldisc.ioctl) {
-               int retval = (tty->ldisc.ioctl)(tty, file, cmd, arg);
-               if (retval != -ENOIOCTLCMD)
-                       return retval;
-       }
-       return -EINVAL;
-}
-
-
-/*
- * This implements the "Secure Attention Key" ---  the idea is to
- * prevent trojan horses by killing all processes associated with this
- * tty when the user hits the "Secure Attention Key".  Required for
- * super-paranoid applications --- see the Orange Book for more details.
- * 
- * This code could be nicer; ideally it should send a HUP, wait a few
- * seconds, then send a INT, and then a KILL signal.  But you then
- * have to coordinate with the init process, since all processes associated
- * with the current tty must be dead before the new getty is allowed
- * to spawn.
- *
- * Now, if it would be correct ;-/ The current code has a nasty hole -
- * it doesn't catch files in flight. We may send the descriptor to ourselves
- * via AF_UNIX socket, close it and later fetch from socket. FIXME.
- *
- * Nasty bug: do_SAK is being called in interrupt context.  This can
- * deadlock.  We punt it up to process context.  AKPM - 16Mar2001
- */
-static void __do_SAK(void *arg)
-{
-#ifdef TTY_SOFT_SAK
-       tty_hangup(tty);
-#else
-       struct tty_struct *tty = arg;
-       struct task_struct *p;
-       int session;
-       int             i;
-       struct file     *filp;
-       
-       if (!tty)
-               return;
-       session  = tty->session;
-       if (tty->ldisc.flush_buffer)
-               tty->ldisc.flush_buffer(tty);
-       if (tty->driver.flush_buffer)
-               tty->driver.flush_buffer(tty);
-       read_lock(&tasklist_lock);
-       for_each_task(p) {
-               if ((p->tty == tty) ||
-                   ((session > 0) && (p->session == session))) {
-                       send_sig(SIGKILL, p, 1);
-                       continue;
-               }
-               task_lock(p);
-               if (p->files) {
-                       read_lock(&p->files->file_lock);
-                       for (i=0; i < p->files->max_fds; i++) {
-                               filp = fcheck_files(p->files, i);
-                               if (filp && (filp->f_op == &tty_fops) &&
-                                   (filp->private_data == tty)) {
-                                       send_sig(SIGKILL, p, 1);
-                                       break;
-                               }
-                       }
-                       read_unlock(&p->files->file_lock);
-               }
-               task_unlock(p);
-       }
-       read_unlock(&tasklist_lock);
-#endif
-}
-
-/*
- * The tq handling here is a little racy - tty->SAK_tq may already be queued.
- * But there's no mechanism to fix that without futzing with tqueue_lock.
- * Fortunately we don't need to worry, because if ->SAK_tq is already queued,
- * the values which we write to it will be identical to the values which it
- * already has. --akpm
- */
-void do_SAK(struct tty_struct *tty)
-{
-       if (!tty)
-               return;
-       PREPARE_TQUEUE(&tty->SAK_tq, __do_SAK, tty);
-       schedule_task(&tty->SAK_tq);
-}
-
-/*
- * This routine is called out of the software interrupt to flush data
- * from the flip buffer to the line discipline.
- */
-static void flush_to_ldisc(void *private_)
-{
-       struct tty_struct *tty = (struct tty_struct *) private_;
-       unsigned char   *cp;
-       char            *fp;
-       int             count;
-       unsigned long flags;
-
-       if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
-               queue_task(&tty->flip.tqueue, &tq_timer);
-               return;
-       }
-       if (tty->flip.buf_num) {
-               cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
-               fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
-               tty->flip.buf_num = 0;
-
-               save_flags(flags); cli();
-               tty->flip.char_buf_ptr = tty->flip.char_buf;
-               tty->flip.flag_buf_ptr = tty->flip.flag_buf;
-       } else {
-               cp = tty->flip.char_buf;
-               fp = tty->flip.flag_buf;
-               tty->flip.buf_num = 1;
-
-               save_flags(flags); cli();
-               tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
-               tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
-       }
-       count = tty->flip.count;
-       tty->flip.count = 0;
-       restore_flags(flags);
-       
-       tty->ldisc.receive_buf(tty, cp, fp, count);
-}
-
-/*
- * Routine which returns the baud rate of the tty
- *
- * Note that the baud_table needs to be kept in sync with the
- * include/asm/termbits.h file.
- */
-static int baud_table[] = {
-       0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-       9600, 19200, 38400, 57600, 115200, 230400, 460800,
-#ifdef __sparc__
-       76800, 153600, 307200, 614400, 921600
-#else
-       500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000,
-       2500000, 3000000, 3500000, 4000000
-#endif
-};
-
-static int n_baud_table = sizeof(baud_table)/sizeof(int);
-
-int tty_get_baud_rate(struct tty_struct *tty)
-{
-       unsigned int cflag, i;
-
-       cflag = tty->termios->c_cflag;
-
-       i = cflag & CBAUD;
-       if (i & CBAUDEX) {
-               i &= ~CBAUDEX;
-               if (i < 1 || i+15 >= n_baud_table) 
-                       tty->termios->c_cflag &= ~CBAUDEX;
-               else
-                       i += 15;
-       }
-       if (i==15 && tty->alt_speed) {
-               if (!tty->warned) {
-                       printk(KERN_WARNING "Use of setserial/setrocket to "
-                                           "set SPD_* flags is deprecated\n");
-                       tty->warned = 1;
-               }
-               return(tty->alt_speed);
-       }
-       
-       return baud_table[i];
-}
-
-void tty_flip_buffer_push(struct tty_struct *tty)
-{
-       if (tty->low_latency)
-               flush_to_ldisc((void *) tty);
-       else
-               queue_task(&tty->flip.tqueue, &tq_timer);
-}
-
-/*
- * This subroutine initializes a tty structure.
- */
-static void initialize_tty_struct(struct tty_struct *tty)
-{
-       memset(tty, 0, sizeof(struct tty_struct));
-       tty->magic = TTY_MAGIC;
-       tty->ldisc = ldiscs[N_TTY];
-       tty->pgrp = -1;
-       tty->flip.char_buf_ptr = tty->flip.char_buf;
-       tty->flip.flag_buf_ptr = tty->flip.flag_buf;
-       tty->flip.tqueue.routine = flush_to_ldisc;
-       tty->flip.tqueue.data = tty;
-       init_MUTEX(&tty->flip.pty_sem);
-       init_waitqueue_head(&tty->write_wait);
-       init_waitqueue_head(&tty->read_wait);
-       tty->tq_hangup.routine = do_tty_hangup;
-       tty->tq_hangup.data = tty;
-       sema_init(&tty->atomic_read, 1);
-       sema_init(&tty->atomic_write, 1);
-       spin_lock_init(&tty->read_lock);
-       INIT_LIST_HEAD(&tty->tty_files);
-       INIT_TQUEUE(&tty->SAK_tq, 0, 0);
-}
-
-/*
- * The default put_char routine if the driver did not define one.
- */
-void tty_default_put_char(struct tty_struct *tty, unsigned char ch)
-{
-       tty->driver.write(tty, 0, &ch, 1);
-}
-
-/*
- * Register a tty device described by <driver>, with minor number <minor>.
- */
-void tty_register_devfs (struct tty_driver *driver, unsigned int flags, unsigned minor)
-{
-#ifdef CONFIG_DEVFS_FS
-       umode_t mode = S_IFCHR | S_IRUSR | S_IWUSR;
-       kdev_t device = MKDEV (driver->major, minor);
-       int idx = minor - driver->minor_start;
-       char buf[32];
-
-       switch (device) {
-               case TTY_DEV:
-               case PTMX_DEV:
-                       mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
-                       break;
-               default:
-                       if (driver->major == PTY_MASTER_MAJOR)
-                               mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
-                       break;
-       }
-       if ( (minor <  driver->minor_start) || 
-            (minor >= driver->minor_start + driver->num) ) {
-               printk(KERN_ERR "Attempt to register invalid minor number "
-                      "with devfs (%d:%d).\n", (int)driver->major,(int)minor);
-               return;
-       }
-#  ifdef CONFIG_UNIX98_PTYS
-       if ( (driver->major >= UNIX98_PTY_SLAVE_MAJOR) &&
-            (driver->major < UNIX98_PTY_SLAVE_MAJOR + UNIX98_NR_MAJORS) )
-               flags |= DEVFS_FL_CURRENT_OWNER;
-#  endif
-       sprintf(buf, driver->name, idx + driver->name_base);
-       devfs_register (NULL, buf, flags | DEVFS_FL_DEFAULT,
-                       driver->major, minor, mode, &tty_fops, NULL);
-#endif /* CONFIG_DEVFS_FS */
-}
-
-void tty_unregister_devfs (struct tty_driver *driver, unsigned minor)
-{
-#ifdef CONFIG_DEVFS_FS
-       void * handle;
-       int idx = minor - driver->minor_start;
-       char buf[32];
-
-       sprintf(buf, driver->name, idx + driver->name_base);
-       handle = devfs_find_handle (NULL, buf, driver->major, minor,
-                                   DEVFS_SPECIAL_CHR, 0);
-       devfs_unregister (handle);
-#endif /* CONFIG_DEVFS_FS */
-}
-
-EXPORT_SYMBOL(tty_register_devfs);
-EXPORT_SYMBOL(tty_unregister_devfs);
-
-/*
- * Called by a tty driver to register itself.
- */
-int tty_register_driver(struct tty_driver *driver)
-{
-       int error;
-        int i;
-
-       if (driver->flags & TTY_DRIVER_INSTALLED)
-               return 0;
-
-       error = devfs_register_chrdev(driver->major, driver->name, &tty_fops);
-       if (error < 0)
-               return error;
-       else if(driver->major == 0)
-               driver->major = error;
-
-       if (!driver->put_char)
-               driver->put_char = tty_default_put_char;
-       
-       driver->prev = 0;
-       driver->next = tty_drivers;
-       if (tty_drivers) tty_drivers->prev = driver;
-       tty_drivers = driver;
-       
-       if ( !(driver->flags & TTY_DRIVER_NO_DEVFS) ) {
-               for(i = 0; i < driver->num; i++)
-                   tty_register_devfs(driver, 0, driver->minor_start + i);
-       }
-       proc_tty_register_driver(driver);
-       return error;
-}
-
-/*
- * Called by a tty driver to unregister itself.
- */
-int tty_unregister_driver(struct tty_driver *driver)
-{
-       int     retval;
-       struct tty_driver *p;
-       int     i, found = 0;
-       struct termios *tp;
-       const char *othername = NULL;
-       
-       if (*driver->refcount)
-               return -EBUSY;
-
-       for (p = tty_drivers; p; p = p->next) {
-               if (p == driver)
-                       found++;
-               else if (p->major == driver->major)
-                       othername = p->name;
-       }
-       
-       if (!found)
-               return -ENOENT;
-
-       if (othername == NULL) {
-               retval = devfs_unregister_chrdev(driver->major, driver->name);
-               if (retval)
-                       return retval;
-       } else
-               devfs_register_chrdev(driver->major, othername, &tty_fops);
-
-       if (driver->prev)
-               driver->prev->next = driver->next;
-       else
-               tty_drivers = driver->next;
-       
-       if (driver->next)
-               driver->next->prev = driver->prev;
-
-       /*
-        * Free the termios and termios_locked structures because
-        * we don't want to get memory leaks when modular tty
-        * drivers are removed from the kernel.
-        */
-       for (i = 0; i < driver->num; i++) {
-               tp = driver->termios[i];
-               if (tp) {
-                       driver->termios[i] = NULL;
-                       kfree(tp);
-               }
-               tp = driver->termios_locked[i];
-               if (tp) {
-                       driver->termios_locked[i] = NULL;
-                       kfree(tp);
-               }
-               tty_unregister_devfs(driver, driver->minor_start + i);
-       }
-       proc_tty_unregister_driver(driver);
-       return 0;
-}
-
-
-/*
- * Initialize the console device. This is called *early*, so
- * we can't necessarily depend on lots of kernel help here.
- * Just do some early initializations, and do the complex setup
- * later.
- */
-void __init console_init(void)
-{
-       /* Setup the default TTY line discipline. */
-       memset(ldiscs, 0, sizeof(ldiscs));
-       (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
-
-       /*
-        * Set up the standard termios.  Individual tty drivers may 
-        * deviate from this; this is used as a template.
-        */
-       memset(&tty_std_termios, 0, sizeof(struct termios));
-       memcpy(tty_std_termios.c_cc, INIT_C_CC, NCCS);
-       tty_std_termios.c_iflag = ICRNL | IXON;
-       tty_std_termios.c_oflag = OPOST | ONLCR;
-       tty_std_termios.c_cflag = B38400 | CS8 | CREAD | HUPCL;
-       tty_std_termios.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
-               ECHOCTL | ECHOKE | IEXTEN;
-
-       /*
-        * set up the console device so that later boot sequences can 
-        * inform about problems etc..
-        */
-#ifdef CONFIG_XENO
-        xeno_console_init();
-#endif
-#ifdef CONFIG_VT
-       con_init();
-#endif
-#ifdef CONFIG_AU1000_SERIAL_CONSOLE
-       au1000_serial_console_init();
-#endif
-#ifdef CONFIG_SERIAL_CONSOLE
-#if (defined(CONFIG_8xx) || defined(CONFIG_8260))
-       console_8xx_init();
-#elif defined(CONFIG_MAC_SERIAL)
-       mac_scc_console_init();
-#elif defined(CONFIG_PARISC)
-       pdc_console_init();
-#elif defined(CONFIG_SERIAL)
-       serial_console_init();
-#endif /* CONFIG_8xx */
-#ifdef CONFIG_SGI_SERIAL
-       sgi_serial_console_init();
-#endif
-#if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
-       vme_scc_console_init();
-#endif
-#if defined(CONFIG_SERIAL167)
-       serial167_console_init();
-#endif
-#if defined(CONFIG_SH_SCI)
-       sci_console_init();
-#endif
-#endif
-#ifdef CONFIG_TN3270_CONSOLE
-       tub3270_con_init();
-#endif
-#ifdef CONFIG_TN3215
-       con3215_init();
-#endif
-#ifdef CONFIG_HWC
-        hwc_console_init();
-#endif
-#ifdef CONFIG_STDIO_CONSOLE
-       stdio_console_init();
-#endif
-#ifdef CONFIG_SERIAL_21285_CONSOLE
-       rs285_console_init();
-#endif
-#ifdef CONFIG_SERIAL_SA1100_CONSOLE
-       sa1100_rs_console_init();
-#endif
-#ifdef CONFIG_ARC_CONSOLE
-       arc_console_init();
-#endif
-#ifdef CONFIG_SERIAL_AMBA_CONSOLE
-       ambauart_console_init();
-#endif
-#ifdef CONFIG_SERIAL_TX3912_CONSOLE
-       tx3912_console_init();
-#endif
-}
-
-static struct tty_driver dev_tty_driver, dev_syscons_driver;
-#ifdef CONFIG_UNIX98_PTYS
-static struct tty_driver dev_ptmx_driver;
-#endif
-#ifdef CONFIG_VT
-static struct tty_driver dev_console_driver;
-#endif
-
-/*
- * Ok, now we can initialize the rest of the tty devices and can count
- * on memory allocations, interrupts etc..
- */
-void __init tty_init(void)
-{
-       /*
-        * dev_tty_driver and dev_console_driver are actually magic
-        * devices which get redirected at open time.  Nevertheless,
-        * we register them so that register_chrdev is called
-        * appropriately.
-        */
-       memset(&dev_tty_driver, 0, sizeof(struct tty_driver));
-       dev_tty_driver.magic = TTY_DRIVER_MAGIC;
-       dev_tty_driver.driver_name = "/dev/tty";
-       dev_tty_driver.name = dev_tty_driver.driver_name + 5;
-       dev_tty_driver.name_base = 0;
-       dev_tty_driver.major = TTYAUX_MAJOR;
-       dev_tty_driver.minor_start = 0;
-       dev_tty_driver.num = 1;
-       dev_tty_driver.type = TTY_DRIVER_TYPE_SYSTEM;
-       dev_tty_driver.subtype = SYSTEM_TYPE_TTY;
-       
-       if (tty_register_driver(&dev_tty_driver))
-               panic("Couldn't register /dev/tty driver\n");
-
-       dev_syscons_driver = dev_tty_driver;
-       dev_syscons_driver.driver_name = "/dev/console";
-       dev_syscons_driver.name = dev_syscons_driver.driver_name + 5;
-       dev_syscons_driver.major = TTYAUX_MAJOR;
-       dev_syscons_driver.minor_start = 1;
-       dev_syscons_driver.type = TTY_DRIVER_TYPE_SYSTEM;
-       dev_syscons_driver.subtype = SYSTEM_TYPE_SYSCONS;
-
-       if (tty_register_driver(&dev_syscons_driver))
-               panic("Couldn't register /dev/console driver\n");
-
-       /* console calls tty_register_driver() before kmalloc() works.
-        * Thus, we can't devfs_register() then.  Do so now, instead. 
-        */
-#ifdef CONFIG_VT
-       con_init_devfs();
-#endif
-
-#ifdef CONFIG_UNIX98_PTYS
-       dev_ptmx_driver = dev_tty_driver;
-       dev_ptmx_driver.driver_name = "/dev/ptmx";
-       dev_ptmx_driver.name = dev_ptmx_driver.driver_name + 5;
-       dev_ptmx_driver.major= MAJOR(PTMX_DEV);
-       dev_ptmx_driver.minor_start = MINOR(PTMX_DEV);
-       dev_ptmx_driver.type = TTY_DRIVER_TYPE_SYSTEM;
-       dev_ptmx_driver.subtype = SYSTEM_TYPE_SYSPTMX;
-
-       if (tty_register_driver(&dev_ptmx_driver))
-               panic("Couldn't register /dev/ptmx driver\n");
-#endif
-       
-#ifdef CONFIG_VT
-       dev_console_driver = dev_tty_driver;
-       dev_console_driver.driver_name = "/dev/vc/0";
-       dev_console_driver.name = dev_console_driver.driver_name + 5;
-       dev_console_driver.major = TTY_MAJOR;
-       dev_console_driver.type = TTY_DRIVER_TYPE_SYSTEM;
-       dev_console_driver.subtype = SYSTEM_TYPE_CONSOLE;
-
-       if (tty_register_driver(&dev_console_driver))
-               panic("Couldn't register /dev/tty0 driver\n");
-
-       kbd_init();
-#endif
-
-#ifdef CONFIG_ESPSERIAL  /* init ESP before rs, so rs doesn't see the port */
-       espserial_init();
-#endif
-#if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
-       vme_scc_init();
-#endif
-#ifdef CONFIG_SERIAL_TX3912
-       tx3912_rs_init();
-#endif
-#ifdef CONFIG_ROCKETPORT
-       rp_init();
-#endif
-#ifdef CONFIG_SERIAL167
-       serial167_init();
-#endif
-#ifdef CONFIG_CYCLADES
-       cy_init();
-#endif
-#ifdef CONFIG_STALLION
-       stl_init();
-#endif
-#ifdef CONFIG_ISTALLION
-       stli_init();
-#endif
-#ifdef CONFIG_DIGI
-       pcxe_init();
-#endif
-#ifdef CONFIG_DIGIEPCA
-       pc_init();
-#endif
-#ifdef CONFIG_SPECIALIX
-       specialix_init();
-#endif
-#if (defined(CONFIG_8xx) || defined(CONFIG_8260))
-       rs_8xx_init();
-#endif /* CONFIG_8xx */
-       pty_init();
-#ifdef CONFIG_MOXA_SMARTIO
-       mxser_init();
-#endif 
-#ifdef CONFIG_MOXA_INTELLIO
-       moxa_init();
-#endif 
-#ifdef CONFIG_VT
-       vcs_init();
-#endif
-#ifdef CONFIG_TN3270
-       tub3270_init();
-#endif
-#ifdef CONFIG_TN3215
-       tty3215_init();
-#endif
-#ifdef CONFIG_HWC
-       hwc_tty_init();
-#endif
-#ifdef CONFIG_A2232
-       a2232board_init();
-#endif
-}
diff --git a/old/xenolinux-2.4.16-sparse/fs/exec.c b/old/xenolinux-2.4.16-sparse/fs/exec.c
deleted file mode 100644 (file)
index 700c6ca..0000000
+++ /dev/null
@@ -1,986 +0,0 @@
-/*
- *  linux/fs/exec.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- */
-
-/*
- * #!-checking implemented by tytso.
- */
-/*
- * Demand-loading implemented 01.12.91 - no need to read anything but
- * the header into memory. The inode of the executable is put into
- * "current->executable", and page faults do the actual loading. Clean.
- *
- * Once more I can proudly say that linux stood up to being changed: it
- * was less than 2 hours work to get demand-loading completely implemented.
- *
- * Demand loading changed July 1993 by Eric Youngdale.   Use mmap instead,
- * current->executable is only used by the procfs.  This allows a dispatch
- * table to check for several different types  of binary formats.  We keep
- * trying until we recognize the file or we run out of supported binary
- * formats. 
- */
-
-#include <linux/config.h>
-#include <linux/slab.h>
-#include <linux/file.h>
-#include <linux/mman.h>
-#include <linux/a.out.h>
-#include <linux/stat.h>
-#include <linux/fcntl.h>
-#include <linux/smp_lock.h>
-#include <linux/init.h>
-#include <linux/pagemap.h>
-#include <linux/highmem.h>
-#include <linux/spinlock.h>
-#include <linux/personality.h>
-#define __NO_VERSION__
-#include <linux/module.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/mmu_context.h>
-
-#ifdef CONFIG_KMOD
-#include <linux/kmod.h>
-#endif
-
-int core_uses_pid;
-
-static struct linux_binfmt *formats;
-static rwlock_t binfmt_lock = RW_LOCK_UNLOCKED;
-
-int register_binfmt(struct linux_binfmt * fmt)
-{
-       struct linux_binfmt ** tmp = &formats;
-
-       if (!fmt)
-               return -EINVAL;
-       if (fmt->next)
-               return -EBUSY;
-       write_lock(&binfmt_lock);
-       while (*tmp) {
-               if (fmt == *tmp) {
-                       write_unlock(&binfmt_lock);
-                       return -EBUSY;
-               }
-               tmp = &(*tmp)->next;
-       }
-       fmt->next = formats;
-       formats = fmt;
-       write_unlock(&binfmt_lock);
-       return 0;       
-}
-
-int unregister_binfmt(struct linux_binfmt * fmt)
-{
-       struct linux_binfmt ** tmp = &formats;
-
-       write_lock(&binfmt_lock);
-       while (*tmp) {
-               if (fmt == *tmp) {
-                       *tmp = fmt->next;
-                       write_unlock(&binfmt_lock);
-                       return 0;
-               }
-               tmp = &(*tmp)->next;
-       }
-       write_unlock(&binfmt_lock);
-       return -EINVAL;
-}
-
-static inline void put_binfmt(struct linux_binfmt * fmt)
-{
-       if (fmt->module)
-               __MOD_DEC_USE_COUNT(fmt->module);
-}
-
-/*
- * Note that a shared library must be both readable and executable due to
- * security reasons.
- *
- * Also note that we take the address to load from from the file itself.
- */
-asmlinkage long sys_uselib(const char * library)
-{
-       struct file * file;
-       struct nameidata nd;
-       int error;
-
-       error = user_path_walk(library, &nd);
-       if (error)
-               goto out;
-
-       error = -EINVAL;
-       if (!S_ISREG(nd.dentry->d_inode->i_mode))
-               goto exit;
-
-       error = permission(nd.dentry->d_inode, MAY_READ | MAY_EXEC);
-       if (error)
-               goto exit;
-
-       file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
-       error = PTR_ERR(file);
-       if (IS_ERR(file))
-               goto out;
-
-       error = -ENOEXEC;
-       if(file->f_op && file->f_op->read) {
-               struct linux_binfmt * fmt;
-
-               read_lock(&binfmt_lock);
-               for (fmt = formats ; fmt ; fmt = fmt->next) {
-                       if (!fmt->load_shlib)
-                               continue;
-                       if (!try_inc_mod_count(fmt->module))
-                               continue;
-                       read_unlock(&binfmt_lock);
-                       error = fmt->load_shlib(file);
-                       read_lock(&binfmt_lock);
-                       put_binfmt(fmt);
-                       if (error != -ENOEXEC)
-                               break;
-               }
-               read_unlock(&binfmt_lock);
-       }
-       fput(file);
-out:
-       return error;
-exit:
-       path_release(&nd);
-       goto out;
-}
-
-/*
- * count() counts the number of arguments/envelopes
- */
-static int count(char ** argv, int max)
-{
-       int i = 0;
-
-       if (argv != NULL) {
-               for (;;) {
-                       char * p;
-
-                       if (get_user(p, argv))
-                               return -EFAULT;
-                       if (!p)
-                               break;
-                       argv++;
-                       if(++i > max)
-                               return -E2BIG;
-               }
-       }
-       return i;
-}
-
-/*
- * 'copy_strings()' copies argument/envelope strings from user
- * memory to free pages in kernel mem. These are in a format ready
- * to be put directly into the top of new user memory.
- */
-int copy_strings(int argc,char ** argv, struct linux_binprm *bprm) 
-{
-       while (argc-- > 0) {
-               char *str;
-               int len;
-               unsigned long pos;
-
-               if (get_user(str, argv+argc) || !(len = strnlen_user(str, bprm->p)))
-                       return -EFAULT;
-               if (bprm->p < len) 
-                       return -E2BIG; 
-
-               bprm->p -= len;
-               /* XXX: add architecture specific overflow check here. */ 
-
-               pos = bprm->p;
-               while (len > 0) {
-                       char *kaddr;
-                       int i, new, err;
-                       struct page *page;
-                       int offset, bytes_to_copy;
-
-                       offset = pos % PAGE_SIZE;
-                       i = pos/PAGE_SIZE;
-                       page = bprm->page[i];
-                       new = 0;
-                       if (!page) {
-                               page = alloc_page(GFP_HIGHUSER);
-                               bprm->page[i] = page;
-                               if (!page)
-                                       return -ENOMEM;
-                               new = 1;
-                       }
-                       kaddr = kmap(page);
-
-                       if (new && offset)
-                               memset(kaddr, 0, offset);
-                       bytes_to_copy = PAGE_SIZE - offset;
-                       if (bytes_to_copy > len) {
-                               bytes_to_copy = len;
-                               if (new)
-                                       memset(kaddr+offset+len, 0, PAGE_SIZE-offset-len);
-                       }
-                       err = copy_from_user(kaddr + offset, str, bytes_to_copy);
-                       kunmap(page);
-
-                       if (err)
-                               return -EFAULT; 
-
-                       pos += bytes_to_copy;
-                       str += bytes_to_copy;
-                       len -= bytes_to_copy;
-               }
-       }
-       return 0;
-}
-
-/*
- * Like copy_strings, but get argv and its values from kernel memory.
- */
-int copy_strings_kernel(int argc,char ** argv, struct linux_binprm *bprm)
-{
-       int r;
-       mm_segment_t oldfs = get_fs();
-       set_fs(KERNEL_DS); 
-       r = copy_strings(argc, argv, bprm);
-       set_fs(oldfs);
-       return r; 
-}
-
-/*
- * This routine is used to map in a page into an address space: needed by
- * execve() for the initial stack and environment pages.
- *
- * tsk->mmap_sem is held for writing.
- */
-void put_dirty_page(struct task_struct * tsk, struct page *page, unsigned long address)
-{
-       pgd_t * pgd;
-       pmd_t * pmd;
-       pte_t * pte;
-
-       if (page_count(page) != 1)
-               printk(KERN_ERR "mem_map disagrees with %p at %08lx\n", page, address);
-       pgd = pgd_offset(tsk->mm, address);
-
-       spin_lock(&tsk->mm->page_table_lock);
-       pmd = pmd_alloc(tsk->mm, pgd, address);
-       if (!pmd)
-               goto out;
-       pte = pte_alloc(tsk->mm, pmd, address);
-       if (!pte)
-               goto out;
-       if (!pte_none(*pte))
-               goto out;
-       lru_cache_add(page);
-       flush_dcache_page(page);
-       flush_page_to_ram(page);
-       set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, PAGE_COPY))));
-       XENO_flush_page_update_queue();
-       tsk->mm->rss++;
-       spin_unlock(&tsk->mm->page_table_lock);
-
-       /* no need for flush_tlb */
-       return;
-out:
-       spin_unlock(&tsk->mm->page_table_lock);
-       __free_page(page);
-       force_sig(SIGKILL, tsk);
-       return;
-}
-
-int setup_arg_pages(struct linux_binprm *bprm)
-{
-       unsigned long stack_base;
-       struct vm_area_struct *mpnt;
-       int i;
-
-       stack_base = STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
-
-       bprm->p += stack_base;
-       if (bprm->loader)
-               bprm->loader += stack_base;
-       bprm->exec += stack_base;
-
-       mpnt = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
-       if (!mpnt) 
-               return -ENOMEM; 
-       
-       down_write(&current->mm->mmap_sem);
-       {
-               mpnt->vm_mm = current->mm;
-               mpnt->vm_start = PAGE_MASK & (unsigned long) bprm->p;
-               mpnt->vm_end = STACK_TOP;
-               mpnt->vm_page_prot = PAGE_COPY;
-               mpnt->vm_flags = VM_STACK_FLAGS;
-               mpnt->vm_ops = NULL;
-               mpnt->vm_pgoff = 0;
-               mpnt->vm_file = NULL;
-               mpnt->vm_private_data = (void *) 0;
-               insert_vm_struct(current->mm, mpnt);
-               current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
-       } 
-
-       for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
-               struct page *page = bprm->page[i];
-               if (page) {
-                       bprm->page[i] = NULL;
-                       put_dirty_page(current,page,stack_base);
-               }
-               stack_base += PAGE_SIZE;
-       }
-       up_write(&current->mm->mmap_sem);
-       
-       return 0;
-}
-
-struct file *open_exec(const char *name)
-{
-       struct nameidata nd;
-       struct inode *inode;
-       struct file *file;
-       int err = 0;
-
-       if (path_init(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd))
-               err = path_walk(name, &nd);
-       file = ERR_PTR(err);
-       if (!err) {
-               inode = nd.dentry->d_inode;
-               file = ERR_PTR(-EACCES);
-               if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
-                   S_ISREG(inode->i_mode)) {
-                       int err = permission(inode, MAY_EXEC);
-                       if (!err && !(inode->i_mode & 0111))
-                               err = -EACCES;
-                       file = ERR_PTR(err);
-                       if (!err) {
-                               file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
-                               if (!IS_ERR(file)) {
-                                       err = deny_write_access(file);
-                                       if (err) {
-                                               fput(file);
-                                               file = ERR_PTR(err);
-                                       }
-                               }
-out:
-                               return file;
-                       }
-               }
-               path_release(&nd);
-       }
-       goto out;
-}
-
-int kernel_read(struct file *file, unsigned long offset,
-       char * addr, unsigned long count)
-{
-       mm_segment_t old_fs;
-       loff_t pos = offset;
-       int result = -ENOSYS;
-
-       if (!file->f_op->read)
-               goto fail;
-       old_fs = get_fs();
-       set_fs(get_ds());
-       result = file->f_op->read(file, addr, count, &pos);
-       set_fs(old_fs);
-fail:
-       return result;
-}
-
-static int exec_mmap(void)
-{
-       struct mm_struct * mm, * old_mm;
-
-       old_mm = current->mm;
-       if (old_mm && atomic_read(&old_mm->mm_users) == 1) {
-               mm_release();
-               exit_mmap(old_mm);
-               return 0;
-       }
-
-       mm = mm_alloc();
-       if (mm) {
-               struct mm_struct *active_mm;
-
-               if (init_new_context(current, mm)) {
-                       mmdrop(mm);
-                       return -ENOMEM;
-               }
-
-               /* Add it to the list of mm's */
-               spin_lock(&mmlist_lock);
-               list_add(&mm->mmlist, &init_mm.mmlist);
-               mmlist_nr++;
-               spin_unlock(&mmlist_lock);
-
-               task_lock(current);
-               active_mm = current->active_mm;
-               current->mm = mm;
-               current->active_mm = mm;
-               task_unlock(current);
-               activate_mm(active_mm, mm);
-               mm_release();
-               if (old_mm) {
-                       if (active_mm != old_mm) BUG();
-                       mmput(old_mm);
-                       return 0;
-               }
-               mmdrop(active_mm);
-               return 0;
-       }
-       return -ENOMEM;
-}
-
-/*
- * This function makes sure the current process has its own signal table,
- * so that flush_signal_handlers can later reset the handlers without
- * disturbing other processes.  (Other processes might share the signal
- * table via the CLONE_SIGNAL option to clone().)
- */
-static inline int make_private_signals(void)
-{
-       struct signal_struct * newsig;
-
-       if (atomic_read(&current->sig->count) <= 1)
-               return 0;
-       newsig = kmem_cache_alloc(sigact_cachep, GFP_KERNEL);
-       if (newsig == NULL)
-               return -ENOMEM;
-       spin_lock_init(&newsig->siglock);
-       atomic_set(&newsig->count, 1);
-       memcpy(newsig->action, current->sig->action, sizeof(newsig->action));
-       spin_lock_irq(&current->sigmask_lock);
-       current->sig = newsig;
-       spin_unlock_irq(&current->sigmask_lock);
-       return 0;
-}
-       
-/*
- * If make_private_signals() made a copy of the signal table, decrement the
- * refcount of the original table, and free it if necessary.
- * We don't do that in make_private_signals() so that we can back off
- * in flush_old_exec() if an error occurs after calling make_private_signals().
- */
-
-static inline void release_old_signals(struct signal_struct * oldsig)
-{
-       if (current->sig == oldsig)
-               return;
-       if (atomic_dec_and_test(&oldsig->count))
-               kmem_cache_free(sigact_cachep, oldsig);
-}
-
-/*
- * These functions flushes out all traces of the currently running executable
- * so that a new one can be started
- */
-
-static inline void flush_old_files(struct files_struct * files)
-{
-       long j = -1;
-
-       write_lock(&files->file_lock);
-       for (;;) {
-               unsigned long set, i;
-
-               j++;
-               i = j * __NFDBITS;
-               if (i >= files->max_fds || i >= files->max_fdset)
-                       break;
-               set = files->close_on_exec->fds_bits[j];
-               if (!set)
-                       continue;
-               files->close_on_exec->fds_bits[j] = 0;
-               write_unlock(&files->file_lock);
-               for ( ; set ; i++,set >>= 1) {
-                       if (set & 1) {
-                               sys_close(i);
-                       }
-               }
-               write_lock(&files->file_lock);
-
-       }
-       write_unlock(&files->file_lock);
-}
-
-/*
- * An execve() will automatically "de-thread" the process.
- * Note: we don't have to hold the tasklist_lock to test
- * whether we migth need to do this. If we're not part of
- * a thread group, there is no way we can become one
- * dynamically. And if we are, we only need to protect the
- * unlink - even if we race with the last other thread exit,
- * at worst the list_del_init() might end up being a no-op.
- */
-static inline void de_thread(struct task_struct *tsk)
-{
-       if (!list_empty(&tsk->thread_group)) {
-               write_lock_irq(&tasklist_lock);
-               list_del_init(&tsk->thread_group);
-               write_unlock_irq(&tasklist_lock);
-       }
-
-       /* Minor oddity: this might stay the same. */
-       tsk->tgid = tsk->pid;
-}
-
-int flush_old_exec(struct linux_binprm * bprm)
-{
-       char * name;
-       int i, ch, retval;
-       struct signal_struct * oldsig;
-
-       /*
-        * Make sure we have a private signal table
-        */
-       oldsig = current->sig;
-       retval = make_private_signals();
-       if (retval) goto flush_failed;
-
-       /* 
-        * Release all of the old mmap stuff
-        */
-       retval = exec_mmap();
-       if (retval) goto mmap_failed;
-
-       /* This is the point of no return */
-       release_old_signals(oldsig);
-
-       current->sas_ss_sp = current->sas_ss_size = 0;
-
-       if (current->euid == current->uid && current->egid == current->gid)
-               current->mm->dumpable = 1;
-       name = bprm->filename;
-       for (i=0; (ch = *(name++)) != '\0';) {
-               if (ch == '/')
-                       i = 0;
-               else
-                       if (i < 15)
-                               current->comm[i++] = ch;
-       }
-       current->comm[i] = '\0';
-
-       flush_thread();
-
-       de_thread(current);
-
-       if (bprm->e_uid != current->euid || bprm->e_gid != current->egid || 
-           permission(bprm->file->f_dentry->d_inode,MAY_READ))
-               current->mm->dumpable = 0;
-
-       /* An exec changes our domain. We are no longer part of the thread
-          group */
-          
-       current->self_exec_id++;
-                       
-       flush_signal_handlers(current);
-       flush_old_files(current->files);
-
-       return 0;
-
-mmap_failed:
-flush_failed:
-       spin_lock_irq(&current->sigmask_lock);
-       if (current->sig != oldsig) {
-               kfree(current->sig);
-               current->sig = oldsig;
-       }
-       spin_unlock_irq(&current->sigmask_lock);
-       return retval;
-}
-
-/*
- * We mustn't allow tracing of suid binaries, unless
- * the tracer has the capability to trace anything..
- */
-static inline int must_not_trace_exec(struct task_struct * p)
-{
-       return (p->ptrace & PT_PTRACED) && !(p->ptrace & PT_PTRACE_CAP);
-}
-
-/* 
- * Fill the binprm structure from the inode. 
- * Check permissions, then read the first 128 (BINPRM_BUF_SIZE) bytes
- */
-int prepare_binprm(struct linux_binprm *bprm)
-{
-       int mode;
-       struct inode * inode = bprm->file->f_dentry->d_inode;
-
-       mode = inode->i_mode;
-       /*
-        * Check execute perms again - if the caller has CAP_DAC_OVERRIDE,
-        * vfs_permission lets a non-executable through
-        */
-       if (!(mode & 0111))     /* with at least _one_ execute bit set */
-               return -EACCES;
-       if (bprm->file->f_op == NULL)
-               return -EACCES;
-
-       bprm->e_uid = current->euid;
-       bprm->e_gid = current->egid;
-
-       if(!(bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)) {
-               /* Set-uid? */
-               if (mode & S_ISUID)
-                       bprm->e_uid = inode->i_uid;
-
-               /* Set-gid? */
-               /*
-                * If setgid is set but no group execute bit then this
-                * is a candidate for mandatory locking, not a setgid
-                * executable.
-                */
-               if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))
-                       bprm->e_gid = inode->i_gid;
-       }
-
-       /* We don't have VFS support for capabilities yet */
-       cap_clear(bprm->cap_inheritable);
-       cap_clear(bprm->cap_permitted);
-       cap_clear(bprm->cap_effective);
-
-       /*  To support inheritance of root-permissions and suid-root
-         *  executables under compatibility mode, we raise all three
-         *  capability sets for the file.
-         *
-         *  If only the real uid is 0, we only raise the inheritable
-         *  and permitted sets of the executable file.
-         */
-
-       if (!issecure(SECURE_NOROOT)) {
-               if (bprm->e_uid == 0 || current->uid == 0) {
-                       cap_set_full(bprm->cap_inheritable);
-                       cap_set_full(bprm->cap_permitted);
-               }
-               if (bprm->e_uid == 0) 
-                       cap_set_full(bprm->cap_effective);
-       }
-
-       memset(bprm->buf,0,BINPRM_BUF_SIZE);
-       return kernel_read(bprm->file,0,bprm->buf,BINPRM_BUF_SIZE);
-}
-
-/*
- * This function is used to produce the new IDs and capabilities
- * from the old ones and the file's capabilities.
- *
- * The formula used for evolving capabilities is:
- *
- *       pI' = pI
- * (***) pP' = (fP & X) | (fI & pI)
- *       pE' = pP' & fE          [NB. fE is 0 or ~0]
- *
- * I=Inheritable, P=Permitted, E=Effective // p=process, f=file
- * ' indicates post-exec(), and X is the global 'cap_bset'.
- *
- */
-
-void compute_creds(struct linux_binprm *bprm) 
-{
-       kernel_cap_t new_permitted, working;
-       int do_unlock = 0;
-
-       new_permitted = cap_intersect(bprm->cap_permitted, cap_bset);
-       working = cap_intersect(bprm->cap_inheritable,
-                               current->cap_inheritable);
-       new_permitted = cap_combine(new_permitted, working);
-
-       if (bprm->e_uid != current->uid || bprm->e_gid != current->gid ||
-           !cap_issubset(new_permitted, current->cap_permitted)) {
-                current->mm->dumpable = 0;
-               
-               lock_kernel();
-               if (must_not_trace_exec(current)
-                   || atomic_read(&current->fs->count) > 1
-                   || atomic_read(&current->files->count) > 1
-                   || atomic_read(&current->sig->count) > 1) {
-                       if(!capable(CAP_SETUID)) {
-                               bprm->e_uid = current->uid;
-                               bprm->e_gid = current->gid;
-                       }
-                       if(!capable(CAP_SETPCAP)) {
-                               new_permitted = cap_intersect(new_permitted,
-                                                       current->cap_permitted);
-                       }
-               }
-               do_unlock = 1;
-       }
-
-
-       /* For init, we want to retain the capabilities set
-         * in the init_task struct. Thus we skip the usual
-         * capability rules */
-       if (current->pid != 1) {
-               current->cap_permitted = new_permitted;
-               current->cap_effective =
-                       cap_intersect(new_permitted, bprm->cap_effective);
-       }
-       
-        /* AUD: Audit candidate if current->cap_effective is set */
-
-        current->suid = current->euid = current->fsuid = bprm->e_uid;
-        current->sgid = current->egid = current->fsgid = bprm->e_gid;
-
-       if(do_unlock)
-               unlock_kernel();
-       current->keep_capabilities = 0;
-}
-
-
-void remove_arg_zero(struct linux_binprm *bprm)
-{
-       if (bprm->argc) {
-               unsigned long offset;
-               char * kaddr;
-               struct page *page;
-
-               offset = bprm->p % PAGE_SIZE;
-               goto inside;
-
-               while (bprm->p++, *(kaddr+offset++)) {
-                       if (offset != PAGE_SIZE)
-                               continue;
-                       offset = 0;
-                       kunmap(page);
-inside:
-                       page = bprm->page[bprm->p/PAGE_SIZE];
-                       kaddr = kmap(page);
-               }
-               kunmap(page);
-               bprm->argc--;
-       }
-}
-
-/*
- * cycle the list of binary formats handler, until one recognizes the image
- */
-int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
-{
-       int try,retval=0;
-       struct linux_binfmt *fmt;
-#ifdef __alpha__
-       /* handle /sbin/loader.. */
-       {
-           struct exec * eh = (struct exec *) bprm->buf;
-
-           if (!bprm->loader && eh->fh.f_magic == 0x183 &&
-               (eh->fh.f_flags & 0x3000) == 0x3000)
-           {
-               struct file * file;
-               unsigned long loader;
-
-               allow_write_access(bprm->file);
-               fput(bprm->file);
-               bprm->file = NULL;
-
-               loader = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-
-               file = open_exec("/sbin/loader");
-               retval = PTR_ERR(file);
-               if (IS_ERR(file))
-                       return retval;
-
-               /* Remember if the application is TASO.  */
-               bprm->sh_bang = eh->ah.entry < 0x100000000;
-
-               bprm->file = file;
-               bprm->loader = loader;
-               retval = prepare_binprm(bprm);
-               if (retval<0)
-                       return retval;
-               /* should call search_binary_handler recursively here,
-                  but it does not matter */
-           }
-       }
-#endif
-       /* kernel module loader fixup */
-       /* so we don't try to load run modprobe in kernel space. */
-       set_fs(USER_DS);
-       for (try=0; try<2; try++) {
-               read_lock(&binfmt_lock);
-               for (fmt = formats ; fmt ; fmt = fmt->next) {
-                       int (*fn)(struct linux_binprm *, struct pt_regs *) = fmt->load_binary;
-                       if (!fn)
-                               continue;
-                       if (!try_inc_mod_count(fmt->module))
-                               continue;
-                       read_unlock(&binfmt_lock);
-                       retval = fn(bprm, regs);
-                       if (retval >= 0) {
-                               put_binfmt(fmt);
-                               allow_write_access(bprm->file);
-                               if (bprm->file)
-                                       fput(bprm->file);
-                               bprm->file = NULL;
-                               current->did_exec = 1;
-                               return retval;
-                       }
-                       read_lock(&binfmt_lock);
-                       put_binfmt(fmt);
-                       if (retval != -ENOEXEC)
-                               break;
-                       if (!bprm->file) {
-                               read_unlock(&binfmt_lock);
-                               return retval;
-                       }
-               }
-               read_unlock(&binfmt_lock);
-               if (retval != -ENOEXEC) {
-                       break;
-#ifdef CONFIG_KMOD
-               }else{
-#define printable(c) (((c)=='\t') || ((c)=='\n') || (0x20<=(c) && (c)<=0x7e))
-                       char modname[20];
-                       if (printable(bprm->buf[0]) &&
-                           printable(bprm->buf[1]) &&
-                           printable(bprm->buf[2]) &&
-                           printable(bprm->buf[3]))
-                               break; /* -ENOEXEC */
-                       sprintf(modname, "binfmt-%04x", *(unsigned short *)(&bprm->buf[2]));
-                       request_module(modname);
-#endif
-               }
-       }
-       return retval;
-}
-
-
-/*
- * sys_execve() executes a new program.
- */
-int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs)
-{
-       struct linux_binprm bprm;
-       struct file *file;
-       int retval;
-       int i;
-
-       file = open_exec(filename);
-
-       retval = PTR_ERR(file);
-       if (IS_ERR(file))
-               return retval;
-
-       bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-       memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0])); 
-
-       bprm.file = file;
-       bprm.filename = filename;
-       bprm.sh_bang = 0;
-       bprm.loader = 0;
-       bprm.exec = 0;
-       if ((bprm.argc = count(argv, bprm.p / sizeof(void *))) < 0) {
-               allow_write_access(file);
-               fput(file);
-               return bprm.argc;
-       }
-
-       if ((bprm.envc = count(envp, bprm.p / sizeof(void *))) < 0) {
-               allow_write_access(file);
-               fput(file);
-               return bprm.envc;
-       }
-
-       retval = prepare_binprm(&bprm);
-       if (retval < 0) 
-               goto out; 
-
-       retval = copy_strings_kernel(1, &bprm.filename, &bprm);
-       if (retval < 0) 
-               goto out; 
-
-       bprm.exec = bprm.p;
-       retval = copy_strings(bprm.envc, envp, &bprm);
-       if (retval < 0) 
-               goto out; 
-
-       retval = copy_strings(bprm.argc, argv, &bprm);
-       if (retval < 0) 
-               goto out; 
-
-       retval = search_binary_handler(&bprm,regs);
-       if (retval >= 0)
-               /* execve success */
-               return retval;
-
-out:
-       /* Something went wrong, return the inode and free the argument pages*/
-       allow_write_access(bprm.file);
-       if (bprm.file)
-               fput(bprm.file);
-
-       for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
-               struct page * page = bprm.page[i];
-               if (page)
-                       __free_page(page);
-       }
-
-       return retval;
-}
-
-void set_binfmt(struct linux_binfmt *new)
-{
-       struct linux_binfmt *old = current->binfmt;
-       if (new && new->module)
-               __MOD_INC_USE_COUNT(new->module);
-       current->binfmt = new;
-       if (old && old->module)
-               __MOD_DEC_USE_COUNT(old->module);
-}
-
-int do_coredump(long signr, struct pt_regs * regs)
-{
-       struct linux_binfmt * binfmt;
-       char corename[6+sizeof(current->comm)+10];
-       struct file * file;
-       struct inode * inode;
-       int retval = 0;
-
-       lock_kernel();
-       binfmt = current->binfmt;
-       if (!binfmt || !binfmt->core_dump)
-               goto fail;
-       if (!current->mm->dumpable)
-               goto fail;
-       current->mm->dumpable = 0;
-       if (current->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump)
-               goto fail;
-
-       memcpy(corename,"core.", 5);
-       corename[4] = '\0';
-       if (core_uses_pid || atomic_read(&current->mm->mm_users) != 1)
-               sprintf(&corename[4], ".%d", current->pid);
-       file = filp_open(corename, O_CREAT | 2 | O_NOFOLLOW, 0600);
-       if (IS_ERR(file))
-               goto fail;
-       inode = file->f_dentry->d_inode;
-       if (inode->i_nlink > 1)
-               goto close_fail;        /* multiple links - don't dump */
-       if (d_unhashed(file->f_dentry))
-               goto close_fail;
-
-       if (!S_ISREG(inode->i_mode))
-               goto close_fail;
-       if (!file->f_op)
-               goto close_fail;
-       if (!file->f_op->write)
-               goto close_fail;
-       if (do_truncate(file->f_dentry, 0) != 0)
-               goto close_fail;
-
-       down_read(&current->mm->mmap_sem);
-       retval = binfmt->core_dump(signr, regs, file);
-       up_read(&current->mm->mmap_sem);
-
-close_fail:
-       filp_close(file, NULL);
-fail:
-       unlock_kernel();
-       return retval;
-}
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/a.out.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/a.out.h
deleted file mode 100644 (file)
index ab17bb8..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef __I386_A_OUT_H__
-#define __I386_A_OUT_H__
-
-struct exec
-{
-  unsigned long a_info;                /* Use macros N_MAGIC, etc for access */
-  unsigned a_text;             /* length of text, in bytes */
-  unsigned a_data;             /* length of data, in bytes */
-  unsigned a_bss;              /* length of uninitialized data area for file, in bytes */
-  unsigned a_syms;             /* length of symbol table data in file, in bytes */
-  unsigned a_entry;            /* start address */
-  unsigned a_trsize;           /* length of relocation info for text, in bytes */
-  unsigned a_drsize;           /* length of relocation info for data, in bytes */
-};
-
-#define N_TRSIZE(a)    ((a).a_trsize)
-#define N_DRSIZE(a)    ((a).a_drsize)
-#define N_SYMSIZE(a)   ((a).a_syms)
-
-#ifdef __KERNEL__
-
-#define STACK_TOP      TASK_SIZE
-
-#endif
-
-#endif /* __A_OUT_GNU_H__ */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/apic.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/apic.h
deleted file mode 100644 (file)
index 5f682e9..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef __ASM_APIC_H
-#define __ASM_APIC_H
-
-#include <linux/config.h>
-#include <linux/pm.h>
-#include <asm/apicdef.h>
-#include <asm/system.h>
-
-#ifdef CONFIG_X86_LOCAL_APIC
-
-#define APIC_DEBUG 0
-
-#if APIC_DEBUG
-#define Dprintk(x...) printk(x)
-#else
-#define Dprintk(x...)
-#endif
-
-/*
- * Basic functions accessing APICs.
- */
-
-static __inline void apic_write(unsigned long reg, unsigned long v)
-{
-       *((volatile unsigned long *)(APIC_BASE+reg)) = v;
-}
-
-static __inline void apic_write_atomic(unsigned long reg, unsigned long v)
-{
-       xchg((volatile unsigned long *)(APIC_BASE+reg), v);
-}
-
-static __inline unsigned long apic_read(unsigned long reg)
-{
-       return *((volatile unsigned long *)(APIC_BASE+reg));
-}
-
-static __inline__ void apic_wait_icr_idle(void)
-{
-       do { } while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY );
-}
-
-#ifdef CONFIG_X86_GOOD_APIC
-# define FORCE_READ_AROUND_WRITE 0
-# define apic_read_around(x)
-# define apic_write_around(x,y) apic_write((x),(y))
-#else
-# define FORCE_READ_AROUND_WRITE 1
-# define apic_read_around(x) apic_read(x)
-# define apic_write_around(x,y) apic_write_atomic((x),(y))
-#endif
-
-static inline void ack_APIC_irq(void)
-{
-       /*
-        * ack_APIC_irq() actually gets compiled as a single instruction:
-        * - a single rmw on Pentium/82489DX
-        * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC)
-        * ... yummie.
-        */
-
-       /* Docs say use 0 for future compatibility */
-       apic_write_around(APIC_EOI, 0);
-}
-
-extern int get_maxlvt(void);
-extern void clear_local_APIC(void);
-extern void connect_bsp_APIC (void);
-extern void disconnect_bsp_APIC (void);
-extern void disable_local_APIC (void);
-extern int verify_local_APIC (void);
-extern void cache_APIC_registers (void);
-extern void sync_Arb_IDs (void);
-extern void init_bsp_APIC (void);
-extern void setup_local_APIC (void);
-extern void init_apic_mappings (void);
-extern void smp_local_timer_interrupt (struct pt_regs * regs);
-extern void setup_APIC_clocks (void);
-extern void setup_apic_nmi_watchdog (void);
-extern inline void nmi_watchdog_tick (struct pt_regs * regs);
-extern int APIC_init_uniprocessor (void);
-
-extern struct pm_dev *apic_pm_register(pm_dev_t, unsigned long, pm_callback);
-extern void apic_pm_unregister(struct pm_dev*);
-
-extern unsigned int apic_timer_irqs [NR_CPUS];
-extern int check_nmi_watchdog (void);
-
-extern unsigned int nmi_watchdog;
-#define NMI_NONE       0
-#define NMI_IO_APIC    1
-#define NMI_LOCAL_APIC 2
-#define NMI_INVALID    3
-
-#endif /* CONFIG_X86_LOCAL_APIC */
-
-#endif /* __ASM_APIC_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/apicdef.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/apicdef.h
deleted file mode 100644 (file)
index f855a7d..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-#ifndef __ASM_APICDEF_H
-#define __ASM_APICDEF_H
-
-/*
- * Constants for various Intel APICs. (local APIC, IOAPIC, etc.)
- *
- * Alan Cox <Alan.Cox@linux.org>, 1995.
- * Ingo Molnar <mingo@redhat.com>, 1999, 2000
- */
-
-#define                APIC_DEFAULT_PHYS_BASE  0xfee00000
-#define                APIC_ID         0x20
-#define                        APIC_ID_MASK            (0x0F<<24)
-#define                        GET_APIC_ID(x)          (((x)>>24)&0x0F)
-#define                APIC_LVR        0x30
-#define                        APIC_LVR_MASK           0xFF00FF
-#define                        GET_APIC_VERSION(x)     ((x)&0xFF)
-#define                        GET_APIC_MAXLVT(x)      (((x)>>16)&0xFF)
-#define                        APIC_INTEGRATED(x)      ((x)&0xF0)
-#define                APIC_TASKPRI    0x80
-#define                        APIC_TPRI_MASK          0xFF
-#define                APIC_ARBPRI     0x90
-#define                        APIC_ARBPRI_MASK        0xFF
-#define                APIC_PROCPRI    0xA0
-#define                APIC_EOI        0xB0
-#define                        APIC_EIO_ACK            0x0             /* Write this to the EOI register */
-#define                APIC_RRR        0xC0
-#define                APIC_LDR        0xD0
-#define                        APIC_LDR_MASK           (0xFF<<24)
-#define                        GET_APIC_LOGICAL_ID(x)  (((x)>>24)&0xFF)
-#define                        SET_APIC_LOGICAL_ID(x)  (((x)<<24))
-#define                        APIC_ALL_CPUS           0xFF
-#define                APIC_DFR        0xE0
-#define                APIC_SPIV       0xF0
-#define                        APIC_SPIV_FOCUS_DISABLED        (1<<9)
-#define                        APIC_SPIV_APIC_ENABLED          (1<<8)
-#define                APIC_ISR        0x100
-#define                APIC_TMR        0x180
-#define        APIC_IRR        0x200
-#define        APIC_ESR        0x280
-#define                        APIC_ESR_SEND_CS        0x00001
-#define                        APIC_ESR_RECV_CS        0x00002
-#define                        APIC_ESR_SEND_ACC       0x00004
-#define                        APIC_ESR_RECV_ACC       0x00008
-#define                        APIC_ESR_SENDILL        0x00020
-#define                        APIC_ESR_RECVILL        0x00040
-#define                        APIC_ESR_ILLREGA        0x00080
-#define                APIC_ICR        0x300
-#define                        APIC_DEST_SELF          0x40000
-#define                        APIC_DEST_ALLINC        0x80000
-#define                        APIC_DEST_ALLBUT        0xC0000
-#define                        APIC_ICR_RR_MASK        0x30000
-#define                        APIC_ICR_RR_INVALID     0x00000
-#define                        APIC_ICR_RR_INPROG      0x10000
-#define                        APIC_ICR_RR_VALID       0x20000
-#define                        APIC_INT_LEVELTRIG      0x08000
-#define                        APIC_INT_ASSERT         0x04000
-#define                        APIC_ICR_BUSY           0x01000
-#define                        APIC_DEST_LOGICAL       0x00800
-#define                        APIC_DM_FIXED           0x00000
-#define                        APIC_DM_LOWEST          0x00100
-#define                        APIC_DM_SMI             0x00200
-#define                        APIC_DM_REMRD           0x00300
-#define                        APIC_DM_NMI             0x00400
-#define                        APIC_DM_INIT            0x00500
-#define                        APIC_DM_STARTUP         0x00600
-#define                        APIC_DM_EXTINT          0x00700
-#define                        APIC_VECTOR_MASK        0x000FF
-#define                APIC_ICR2       0x310
-#define                        GET_APIC_DEST_FIELD(x)  (((x)>>24)&0xFF)
-#define                        SET_APIC_DEST_FIELD(x)  ((x)<<24)
-#define                APIC_LVTT       0x320
-#define                APIC_LVTPC      0x340
-#define                APIC_LVT0       0x350
-#define                        APIC_LVT_TIMER_BASE_MASK        (0x3<<18)
-#define                        GET_APIC_TIMER_BASE(x)          (((x)>>18)&0x3)
-#define                        SET_APIC_TIMER_BASE(x)          (((x)<<18))
-#define                        APIC_TIMER_BASE_CLKIN           0x0
-#define                        APIC_TIMER_BASE_TMBASE          0x1
-#define                        APIC_TIMER_BASE_DIV             0x2
-#define                        APIC_LVT_TIMER_PERIODIC         (1<<17)
-#define                        APIC_LVT_MASKED                 (1<<16)
-#define                        APIC_LVT_LEVEL_TRIGGER          (1<<15)
-#define                        APIC_LVT_REMOTE_IRR             (1<<14)
-#define                        APIC_INPUT_POLARITY             (1<<13)
-#define                        APIC_SEND_PENDING               (1<<12)
-#define                        GET_APIC_DELIVERY_MODE(x)       (((x)>>8)&0x7)
-#define                        SET_APIC_DELIVERY_MODE(x,y)     (((x)&~0x700)|((y)<<8))
-#define                                APIC_MODE_FIXED         0x0
-#define                                APIC_MODE_NMI           0x4
-#define                                APIC_MODE_EXINT         0x7
-#define        APIC_LVT1       0x360
-#define                APIC_LVTERR     0x370
-#define                APIC_TMICT      0x380
-#define                APIC_TMCCT      0x390
-#define                APIC_TDCR       0x3E0
-#define                        APIC_TDR_DIV_TMBASE     (1<<2)
-#define                        APIC_TDR_DIV_1          0xB
-#define                        APIC_TDR_DIV_2          0x0
-#define                        APIC_TDR_DIV_4          0x1
-#define                        APIC_TDR_DIV_8          0x2
-#define                        APIC_TDR_DIV_16         0x3
-#define                        APIC_TDR_DIV_32         0x8
-#define                        APIC_TDR_DIV_64         0x9
-#define                        APIC_TDR_DIV_128        0xA
-
-#define APIC_BASE (fix_to_virt(FIX_APIC_BASE))
-
-#define MAX_IO_APICS 8
-
-/*
- * the local APIC register structure, memory mapped. Not terribly well
- * tested, but we might eventually use this one in the future - the
- * problem why we cannot use it right now is the P5 APIC, it has an
- * errata which cannot take 8-bit reads and writes, only 32-bit ones ...
- */
-#define u32 unsigned int
-
-#define lapic ((volatile struct local_apic *)APIC_BASE)
-
-struct local_apic {
-
-/*000*/        struct { u32 __reserved[4]; } __reserved_01;
-
-/*010*/        struct { u32 __reserved[4]; } __reserved_02;
-
-/*020*/        struct { /* APIC ID Register */
-               u32   __reserved_1      : 24,
-                       phys_apic_id    :  4,
-                       __reserved_2    :  4;
-               u32 __reserved[3];
-       } id;
-
-/*030*/        const
-       struct { /* APIC Version Register */
-               u32   version           :  8,
-                       __reserved_1    :  8,
-                       max_lvt         :  8,
-                       __reserved_2    :  8;
-               u32 __reserved[3];
-       } version;
-
-/*040*/        struct { u32 __reserved[4]; } __reserved_03;
-
-/*050*/        struct { u32 __reserved[4]; } __reserved_04;
-
-/*060*/        struct { u32 __reserved[4]; } __reserved_05;
-
-/*070*/        struct { u32 __reserved[4]; } __reserved_06;
-
-/*080*/        struct { /* Task Priority Register */
-               u32   priority  :  8,
-                       __reserved_1    : 24;
-               u32 __reserved_2[3];
-       } tpr;
-
-/*090*/        const
-       struct { /* Arbitration Priority Register */
-               u32   priority  :  8,
-                       __reserved_1    : 24;
-               u32 __reserved_2[3];
-       } apr;
-
-/*0A0*/        const
-       struct { /* Processor Priority Register */
-               u32   priority  :  8,
-                       __reserved_1    : 24;
-               u32 __reserved_2[3];
-       } ppr;
-
-/*0B0*/        struct { /* End Of Interrupt Register */
-               u32   eoi;
-               u32 __reserved[3];
-       } eoi;
-
-/*0C0*/        struct { u32 __reserved[4]; } __reserved_07;
-
-/*0D0*/        struct { /* Logical Destination Register */
-               u32   __reserved_1      : 24,
-                       logical_dest    :  8;
-               u32 __reserved_2[3];
-       } ldr;
-
-/*0E0*/        struct { /* Destination Format Register */
-               u32   __reserved_1      : 28,
-                       model           :  4;
-               u32 __reserved_2[3];
-       } dfr;
-
-/*0F0*/        struct { /* Spurious Interrupt Vector Register */
-               u32     spurious_vector :  8,
-                       apic_enabled    :  1,
-                       focus_cpu       :  1,
-                       __reserved_2    : 22;
-               u32 __reserved_3[3];
-       } svr;
-
-/*100*/        struct { /* In Service Register */
-/*170*/                u32 bitfield;
-               u32 __reserved[3];
-       } isr [8];
-
-/*180*/        struct { /* Trigger Mode Register */
-/*1F0*/                u32 bitfield;
-               u32 __reserved[3];
-       } tmr [8];
-
-/*200*/        struct { /* Interrupt Request Register */
-/*270*/                u32 bitfield;
-               u32 __reserved[3];
-       } irr [8];
-
-/*280*/        union { /* Error Status Register */
-               struct {
-                       u32   send_cs_error                     :  1,
-                               receive_cs_error                :  1,
-                               send_accept_error               :  1,
-                               receive_accept_error            :  1,
-                               __reserved_1                    :  1,
-                               send_illegal_vector             :  1,
-                               receive_illegal_vector          :  1,
-                               illegal_register_address        :  1,
-                               __reserved_2                    : 24;
-                       u32 __reserved_3[3];
-               } error_bits;
-               struct {
-                       u32 errors;
-                       u32 __reserved_3[3];
-               } all_errors;
-       } esr;
-
-/*290*/        struct { u32 __reserved[4]; } __reserved_08;
-
-/*2A0*/        struct { u32 __reserved[4]; } __reserved_09;
-
-/*2B0*/        struct { u32 __reserved[4]; } __reserved_10;
-
-/*2C0*/        struct { u32 __reserved[4]; } __reserved_11;
-
-/*2D0*/        struct { u32 __reserved[4]; } __reserved_12;
-
-/*2E0*/        struct { u32 __reserved[4]; } __reserved_13;
-
-/*2F0*/        struct { u32 __reserved[4]; } __reserved_14;
-
-/*300*/        struct { /* Interrupt Command Register 1 */
-               u32   vector                    :  8,
-                       delivery_mode           :  3,
-                       destination_mode        :  1,
-                       delivery_status         :  1,
-                       __reserved_1            :  1,
-                       level                   :  1,
-                       trigger                 :  1,
-                       __reserved_2            :  2,
-                       shorthand               :  2,
-                       __reserved_3            :  12;
-               u32 __reserved_4[3];
-       } icr1;
-
-/*310*/        struct { /* Interrupt Command Register 2 */
-               union {
-                       u32   __reserved_1      : 24,
-                               phys_dest       :  4,
-                               __reserved_2    :  4;
-                       u32   __reserved_3      : 24,
-                               logical_dest    :  8;
-               } dest;
-               u32 __reserved_4[3];
-       } icr2;
-
-/*320*/        struct { /* LVT - Timer */
-               u32   vector            :  8,
-                       __reserved_1    :  4,
-                       delivery_status :  1,
-                       __reserved_2    :  3,
-                       mask            :  1,
-                       timer_mode      :  1,
-                       __reserved_3    : 14;
-               u32 __reserved_4[3];
-       } lvt_timer;
-
-/*330*/        struct { u32 __reserved[4]; } __reserved_15;
-
-/*340*/        struct { /* LVT - Performance Counter */
-               u32   vector            :  8,
-                       delivery_mode   :  3,
-                       __reserved_1    :  1,
-                       delivery_status :  1,
-                       __reserved_2    :  3,
-                       mask            :  1,
-                       __reserved_3    : 15;
-               u32 __reserved_4[3];
-       } lvt_pc;
-
-/*350*/        struct { /* LVT - LINT0 */
-               u32   vector            :  8,
-                       delivery_mode   :  3,
-                       __reserved_1    :  1,
-                       delivery_status :  1,
-                       polarity        :  1,
-                       remote_irr      :  1,
-                       trigger         :  1,
-                       mask            :  1,
-                       __reserved_2    : 15;
-               u32 __reserved_3[3];
-       } lvt_lint0;
-
-/*360*/        struct { /* LVT - LINT1 */
-               u32   vector            :  8,
-                       delivery_mode   :  3,
-                       __reserved_1    :  1,
-                       delivery_status :  1,
-                       polarity        :  1,
-                       remote_irr      :  1,
-                       trigger         :  1,
-                       mask            :  1,
-                       __reserved_2    : 15;
-               u32 __reserved_3[3];
-       } lvt_lint1;
-
-/*370*/        struct { /* LVT - Error */
-               u32   vector            :  8,
-                       __reserved_1    :  4,
-                       delivery_status :  1,
-                       __reserved_2    :  3,
-                       mask            :  1,
-                       __reserved_3    : 15;
-               u32 __reserved_4[3];
-       } lvt_error;
-
-/*380*/        struct { /* Timer Initial Count Register */
-               u32   initial_count;
-               u32 __reserved_2[3];
-       } timer_icr;
-
-/*390*/        const
-       struct { /* Timer Current Count Register */
-               u32   curr_count;
-               u32 __reserved_2[3];
-       } timer_ccr;
-
-/*3A0*/        struct { u32 __reserved[4]; } __reserved_16;
-
-/*3B0*/        struct { u32 __reserved[4]; } __reserved_17;
-
-/*3C0*/        struct { u32 __reserved[4]; } __reserved_18;
-
-/*3D0*/        struct { u32 __reserved[4]; } __reserved_19;
-
-/*3E0*/        struct { /* Timer Divide Configuration Register */
-               u32   divisor           :  4,
-                       __reserved_1    : 28;
-               u32 __reserved_2[3];
-       } timer_dcr;
-
-/*3F0*/        struct { u32 __reserved[4]; } __reserved_20;
-
-} __attribute__ ((packed));
-
-#undef u32
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/atomic.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/atomic.h
deleted file mode 100644 (file)
index b356b37..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-#ifndef __ARCH_I386_ATOMIC__
-#define __ARCH_I386_ATOMIC__
-
-#include <linux/config.h>
-
-/*
- * Atomic operations that C can't guarantee us.  Useful for
- * resource counting etc..
- */
-
-#ifdef CONFIG_SMP
-#define LOCK "lock ; "
-#else
-#define LOCK ""
-#endif
-
-/*
- * Make sure gcc doesn't try to be clever and move things around
- * on us. We need to use _exactly_ the address the user gave us,
- * not some alias that contains the same information.
- */
-typedef struct { volatile int counter; } atomic_t;
-
-#define ATOMIC_INIT(i) { (i) }
-
-/**
- * atomic_read - read atomic variable
- * @v: pointer of type atomic_t
- * 
- * Atomically reads the value of @v.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-#define atomic_read(v)         ((v)->counter)
-
-/**
- * atomic_set - set atomic variable
- * @v: pointer of type atomic_t
- * @i: required value
- * 
- * Atomically sets the value of @v to @i.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-#define atomic_set(v,i)                (((v)->counter) = (i))
-
-/**
- * atomic_add - add integer to atomic variable
- * @i: integer value to add
- * @v: pointer of type atomic_t
- * 
- * Atomically adds @i to @v.  Note that the guaranteed useful range
- * of an atomic_t is only 24 bits.
- */
-static __inline__ void atomic_add(int i, atomic_t *v)
-{
-       __asm__ __volatile__(
-               LOCK "addl %1,%0"
-               :"=m" (v->counter)
-               :"ir" (i), "m" (v->counter));
-}
-
-/**
- * atomic_sub - subtract the atomic variable
- * @i: integer value to subtract
- * @v: pointer of type atomic_t
- * 
- * Atomically subtracts @i from @v.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */
-static __inline__ void atomic_sub(int i, atomic_t *v)
-{
-       __asm__ __volatile__(
-               LOCK "subl %1,%0"
-               :"=m" (v->counter)
-               :"ir" (i), "m" (v->counter));
-}
-
-/**
- * atomic_sub_and_test - subtract value from variable and test result
- * @i: integer value to subtract
- * @v: pointer of type atomic_t
- * 
- * Atomically subtracts @i from @v and returns
- * true if the result is zero, or false for all
- * other cases.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */
-static __inline__ int atomic_sub_and_test(int i, atomic_t *v)
-{
-       unsigned char c;
-
-       __asm__ __volatile__(
-               LOCK "subl %2,%0; sete %1"
-               :"=m" (v->counter), "=qm" (c)
-               :"ir" (i), "m" (v->counter) : "memory");
-       return c;
-}
-
-/**
- * atomic_inc - increment atomic variable
- * @v: pointer of type atomic_t
- * 
- * Atomically increments @v by 1.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-static __inline__ void atomic_inc(atomic_t *v)
-{
-       __asm__ __volatile__(
-               LOCK "incl %0"
-               :"=m" (v->counter)
-               :"m" (v->counter));
-}
-
-/**
- * atomic_dec - decrement atomic variable
- * @v: pointer of type atomic_t
- * 
- * Atomically decrements @v by 1.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-static __inline__ void atomic_dec(atomic_t *v)
-{
-       __asm__ __volatile__(
-               LOCK "decl %0"
-               :"=m" (v->counter)
-               :"m" (v->counter));
-}
-
-/**
- * atomic_dec_and_test - decrement and test
- * @v: pointer of type atomic_t
- * 
- * Atomically decrements @v by 1 and
- * returns true if the result is 0, or false for all other
- * cases.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-static __inline__ int atomic_dec_and_test(atomic_t *v)
-{
-       unsigned char c;
-
-       __asm__ __volatile__(
-               LOCK "decl %0; sete %1"
-               :"=m" (v->counter), "=qm" (c)
-               :"m" (v->counter) : "memory");
-       return c != 0;
-}
-
-/**
- * atomic_inc_and_test - increment and test 
- * @v: pointer of type atomic_t
- * 
- * Atomically increments @v by 1
- * and returns true if the result is zero, or false for all
- * other cases.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-static __inline__ int atomic_inc_and_test(atomic_t *v)
-{
-       unsigned char c;
-
-       __asm__ __volatile__(
-               LOCK "incl %0; sete %1"
-               :"=m" (v->counter), "=qm" (c)
-               :"m" (v->counter) : "memory");
-       return c != 0;
-}
-
-/**
- * atomic_add_negative - add and test if negative
- * @v: pointer of type atomic_t
- * @i: integer value to add
- * 
- * Atomically adds @i to @v and returns true
- * if the result is negative, or false when
- * result is greater than or equal to zero.  Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */ 
-static __inline__ int atomic_add_negative(int i, atomic_t *v)
-{
-       unsigned char c;
-
-       __asm__ __volatile__(
-               LOCK "addl %2,%0; sets %1"
-               :"=m" (v->counter), "=qm" (c)
-               :"ir" (i), "m" (v->counter) : "memory");
-       return c;
-}
-
-/* These are x86-specific, used by some header files */
-#define atomic_clear_mask(mask, addr) \
-__asm__ __volatile__(LOCK "andl %0,%1" \
-: : "r" (~(mask)),"m" (*addr) : "memory")
-
-#define atomic_set_mask(mask, addr) \
-__asm__ __volatile__(LOCK "orl %0,%1" \
-: : "r" (mask),"m" (*addr) : "memory")
-
-/* Atomic operations are already serializing on x86 */
-#define smp_mb__before_atomic_dec()    barrier()
-#define smp_mb__after_atomic_dec()     barrier()
-#define smp_mb__before_atomic_inc()    barrier()
-#define smp_mb__after_atomic_inc()     barrier()
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/bitops.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/bitops.h
deleted file mode 100644 (file)
index a3063ca..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-#ifndef _I386_BITOPS_H
-#define _I386_BITOPS_H
-
-/*
- * Copyright 1992, Linus Torvalds.
- */
-
-#include <linux/config.h>
-
-/*
- * These have to be done with inline assembly: that way the bit-setting
- * is guaranteed to be atomic. All bit operations return 0 if the bit
- * was cleared before the operation and != 0 if it was not.
- *
- * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
- */
-
-#ifdef CONFIG_SMP
-#define LOCK_PREFIX "lock ; "
-#else
-#define LOCK_PREFIX ""
-#endif
-
-#define ADDR (*(volatile long *) addr)
-
-/**
- * set_bit - Atomically set a bit in memory
- * @nr: the bit to set
- * @addr: the address to start counting from
- *
- * This function is atomic and may not be reordered.  See __set_bit()
- * if you do not require the atomic guarantees.
- * Note that @nr may be almost arbitrarily large; this function is not
- * restricted to acting on a single-word quantity.
- */
-static __inline__ void set_bit(int nr, volatile void * addr)
-{
-       __asm__ __volatile__( LOCK_PREFIX
-               "btsl %1,%0"
-               :"=m" (ADDR)
-               :"Ir" (nr));
-}
-
-/**
- * __set_bit - Set a bit in memory
- * @nr: the bit to set
- * @addr: the address to start counting from
- *
- * Unlike set_bit(), this function is non-atomic and may be reordered.
- * If it's called on the same region of memory simultaneously, the effect
- * may be that only one operation succeeds.
- */
-static __inline__ void __set_bit(int nr, volatile void * addr)
-{
-       __asm__(
-               "btsl %1,%0"
-               :"=m" (ADDR)
-               :"Ir" (nr));
-}
-
-/**
- * clear_bit - Clears a bit in memory
- * @nr: Bit to clear
- * @addr: Address to start counting from
- *
- * clear_bit() is atomic and may not be reordered.  However, it does
- * not contain a memory barrier, so if it is used for locking purposes,
- * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
- * in order to ensure changes are visible on other processors.
- */
-static __inline__ void clear_bit(int nr, volatile void * addr)
-{
-       __asm__ __volatile__( LOCK_PREFIX
-               "btrl %1,%0"
-               :"=m" (ADDR)
-               :"Ir" (nr));
-}
-#define smp_mb__before_clear_bit()     barrier()
-#define smp_mb__after_clear_bit()      barrier()
-
-/**
- * __change_bit - Toggle a bit in memory
- * @nr: the bit to set
- * @addr: the address to start counting from
- *
- * Unlike change_bit(), this function is non-atomic and may be reordered.
- * If it's called on the same region of memory simultaneously, the effect
- * may be that only one operation succeeds.
- */
-static __inline__ void __change_bit(int nr, volatile void * addr)
-{
-       __asm__ __volatile__(
-               "btcl %1,%0"
-               :"=m" (ADDR)
-               :"Ir" (nr));
-}
-
-/**
- * change_bit - Toggle a bit in memory
- * @nr: Bit to clear
- * @addr: Address to start counting from
- *
- * change_bit() is atomic and may not be reordered.
- * Note that @nr may be almost arbitrarily large; this function is not
- * restricted to acting on a single-word quantity.
- */
-static __inline__ void change_bit(int nr, volatile void * addr)
-{
-       __asm__ __volatile__( LOCK_PREFIX
-               "btcl %1,%0"
-               :"=m" (ADDR)
-               :"Ir" (nr));
-}
-
-/**
- * test_and_set_bit - Set a bit and return its old value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is atomic and cannot be reordered.  
- * It also implies a memory barrier.
- */
-static __inline__ int test_and_set_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__ __volatile__( LOCK_PREFIX
-               "btsl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"=m" (ADDR)
-               :"Ir" (nr) : "memory");
-       return oldbit;
-}
-
-/**
- * __test_and_set_bit - Set a bit and return its old value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is non-atomic and can be reordered.  
- * If two examples of this operation race, one can appear to succeed
- * but actually fail.  You must protect multiple accesses with a lock.
- */
-static __inline__ int __test_and_set_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__(
-               "btsl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"=m" (ADDR)
-               :"Ir" (nr));
-       return oldbit;
-}
-
-/**
- * test_and_clear_bit - Clear a bit and return its old value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is atomic and cannot be reordered.  
- * It also implies a memory barrier.
- */
-static __inline__ int test_and_clear_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__ __volatile__( LOCK_PREFIX
-               "btrl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"=m" (ADDR)
-               :"Ir" (nr) : "memory");
-       return oldbit;
-}
-
-/**
- * __test_and_clear_bit - Clear a bit and return its old value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is non-atomic and can be reordered.  
- * If two examples of this operation race, one can appear to succeed
- * but actually fail.  You must protect multiple accesses with a lock.
- */
-static __inline__ int __test_and_clear_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__(
-               "btrl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"=m" (ADDR)
-               :"Ir" (nr));
-       return oldbit;
-}
-
-/* WARNING: non atomic and it can be reordered! */
-static __inline__ int __test_and_change_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__ __volatile__(
-               "btcl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"=m" (ADDR)
-               :"Ir" (nr) : "memory");
-       return oldbit;
-}
-
-/**
- * test_and_change_bit - Change a bit and return its new value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is atomic and cannot be reordered.  
- * It also implies a memory barrier.
- */
-static __inline__ int test_and_change_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__ __volatile__( LOCK_PREFIX
-               "btcl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"=m" (ADDR)
-               :"Ir" (nr) : "memory");
-       return oldbit;
-}
-
-#if 0 /* Fool kernel-doc since it doesn't do macros yet */
-/**
- * test_bit - Determine whether a bit is set
- * @nr: bit number to test
- * @addr: Address to start counting from
- */
-static int test_bit(int nr, const volatile void * addr);
-#endif
-
-static __inline__ int constant_test_bit(int nr, const volatile void * addr)
-{
-       return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
-}
-
-static __inline__ int variable_test_bit(int nr, volatile void * addr)
-{
-       int oldbit;
-
-       __asm__ __volatile__(
-               "btl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit)
-               :"m" (ADDR),"Ir" (nr));
-       return oldbit;
-}
-
-#define test_bit(nr,addr) \
-(__builtin_constant_p(nr) ? \
- constant_test_bit((nr),(addr)) : \
- variable_test_bit((nr),(addr)))
-
-/**
- * find_first_zero_bit - find the first zero bit in a memory region
- * @addr: The address to start the search at
- * @size: The maximum size to search
- *
- * Returns the bit-number of the first zero bit, not the number of the byte
- * containing a bit.
- */
-static __inline__ int find_first_zero_bit(void * addr, unsigned size)
-{
-       int d0, d1, d2;
-       int res;
-
-       if (!size)
-               return 0;
-       /* This looks at memory. Mark it volatile to tell gcc not to move it around */
-       __asm__ __volatile__(
-               "movl $-1,%%eax\n\t"
-               "xorl %%edx,%%edx\n\t"
-               "repe; scasl\n\t"
-               "je 1f\n\t"
-               "xorl -4(%%edi),%%eax\n\t"
-               "subl $4,%%edi\n\t"
-               "bsfl %%eax,%%edx\n"
-               "1:\tsubl %%ebx,%%edi\n\t"
-               "shll $3,%%edi\n\t"
-               "addl %%edi,%%edx"
-               :"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2)
-               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr));
-       return res;
-}
-
-/**
- * find_next_zero_bit - find the first zero bit in a memory region
- * @addr: The address to base the search on
- * @offset: The bitnumber to start searching at
- * @size: The maximum size to search
- */
-static __inline__ int find_next_zero_bit (void * addr, int size, int offset)
-{
-       unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
-       int set = 0, bit = offset & 31, res;
-       
-       if (bit) {
-               /*
-                * Look for zero in first byte
-                */
-               __asm__("bsfl %1,%0\n\t"
-                       "jne 1f\n\t"
-                       "movl $32, %0\n"
-                       "1:"
-                       : "=r" (set)
-                       : "r" (~(*p >> bit)));
-               if (set < (32 - bit))
-                       return set + offset;
-               set = 32 - bit;
-               p++;
-       }
-       /*
-        * No zero yet, search remaining full bytes for a zero
-        */
-       res = find_first_zero_bit (p, size - 32 * (p - (unsigned long *) addr));
-       return (offset + set + res);
-}
-
-/**
- * ffz - find first zero in word.
- * @word: The word to search
- *
- * Undefined if no zero exists, so code should check against ~0UL first.
- */
-static __inline__ unsigned long ffz(unsigned long word)
-{
-       __asm__("bsfl %1,%0"
-               :"=r" (word)
-               :"r" (~word));
-       return word;
-}
-
-#ifdef __KERNEL__
-
-/**
- * ffs - find first bit set
- * @x: the word to search
- *
- * This is defined the same way as
- * the libc and compiler builtin ffs routines, therefore
- * differs in spirit from the above ffz (man ffs).
- */
-static __inline__ int ffs(int x)
-{
-       int r;
-
-       __asm__("bsfl %1,%0\n\t"
-               "jnz 1f\n\t"
-               "movl $-1,%0\n"
-               "1:" : "=r" (r) : "g" (x));
-       return r+1;
-}
-
-/**
- * hweightN - returns the hamming weight of a N-bit word
- * @x: the word to weigh
- *
- * The Hamming Weight of a number is the total number of bits set in it.
- */
-
-#define hweight32(x) generic_hweight32(x)
-#define hweight16(x) generic_hweight16(x)
-#define hweight8(x) generic_hweight8(x)
-
-#endif /* __KERNEL__ */
-
-#ifdef __KERNEL__
-
-#define ext2_set_bit                 __test_and_set_bit
-#define ext2_clear_bit               __test_and_clear_bit
-#define ext2_test_bit                test_bit
-#define ext2_find_first_zero_bit     find_first_zero_bit
-#define ext2_find_next_zero_bit      find_next_zero_bit
-
-/* Bitmap functions for the minix filesystem.  */
-#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,addr)
-#define minix_set_bit(nr,addr) __set_bit(nr,addr)
-#define minix_test_and_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
-#define minix_test_bit(nr,addr) test_bit(nr,addr)
-#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
-
-#endif /* __KERNEL__ */
-
-#endif /* _I386_BITOPS_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/boot.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/boot.h
deleted file mode 100644 (file)
index 96b228e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _LINUX_BOOT_H
-#define _LINUX_BOOT_H
-
-/* Don't touch these, unless you really know what you're doing. */
-#define DEF_INITSEG    0x9000
-#define DEF_SYSSEG     0x1000
-#define DEF_SETUPSEG   0x9020
-#define DEF_SYSSIZE    0x7F00
-
-/* Internal svga startup constants */
-#define NORMAL_VGA     0xffff          /* 80x25 mode */
-#define EXTENDED_VGA   0xfffe          /* 80x50 mode */
-#define ASK_VGA                0xfffd          /* ask for it at bootup */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/bugs.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/bugs.h
deleted file mode 100644 (file)
index 07fee92..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  include/asm-i386/bugs.h
- *
- *  Copyright (C) 1994  Linus Torvalds
- *
- *  Cyrix stuff, June 1998 by:
- *     - Rafael R. Reilova (moved everything from head.S),
- *        <rreilova@ececs.uc.edu>
- *     - Channing Corn (tests & fixes),
- *     - Andrew D. Balsa (code cleanup).
- *
- *  Pentium III FXSR, SSE support
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-/*
- * This is included by init/main.c to check for architecture-dependent bugs.
- *
- * Needs:
- *     void check_bugs(void);
- */
-
-#include <linux/config.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/msr.h>
-
-
-static void __init check_fpu(void)
-{
-    boot_cpu_data.fdiv_bug = 0;
-}
-
-static void __init check_hlt(void)
-{
-    boot_cpu_data.hlt_works_ok = 1;
-}
-
-static void __init check_bugs(void)
-{
-    identify_cpu(&boot_cpu_data);
-#ifndef CONFIG_SMP
-    printk("CPU: ");
-    print_cpu_info(&boot_cpu_data);
-#endif
-    check_fpu();
-    check_hlt();
-    system_utsname.machine[1] = '0' + 
-        (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
-}
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/byteorder.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/byteorder.h
deleted file mode 100644 (file)
index bbfb629..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef _I386_BYTEORDER_H
-#define _I386_BYTEORDER_H
-
-#include <asm/types.h>
-
-#ifdef __GNUC__
-
-/* For avoiding bswap on i386 */
-#ifdef __KERNEL__
-#include <linux/config.h>
-#endif
-
-static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
-{
-#ifdef CONFIG_X86_BSWAP
-       __asm__("bswap %0" : "=r" (x) : "0" (x));
-#else
-       __asm__("xchgb %b0,%h0\n\t"     /* swap lower bytes     */
-               "rorl $16,%0\n\t"       /* swap words           */
-               "xchgb %b0,%h0"         /* swap higher bytes    */
-               :"=q" (x)
-               : "0" (x));
-#endif
-       return x;
-}
-
-static __inline__ __const__ __u16 ___arch__swab16(__u16 x)
-{
-       __asm__("xchgb %b0,%h0"         /* swap bytes           */ \
-               : "=q" (x) \
-               :  "0" (x)); \
-               return x;
-}
-
-#define __arch__swab32(x) ___arch__swab32(x)
-#define __arch__swab16(x) ___arch__swab16(x)
-
-#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
-#  define __BYTEORDER_HAS_U64__
-#  define __SWAB_64_THRU_32__
-#endif
-
-#endif /* __GNUC__ */
-
-#include <linux/byteorder/little_endian.h>
-
-#endif /* _I386_BYTEORDER_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/cache.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/cache.h
deleted file mode 100644 (file)
index 615911e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * include/asm-i386/cache.h
- */
-#ifndef __ARCH_I386_CACHE_H
-#define __ARCH_I386_CACHE_H
-
-#include <linux/config.h>
-
-/* L1 cache line size */
-#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)
-#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/checksum.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/checksum.h
deleted file mode 100644 (file)
index 0de58ab..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifndef _I386_CHECKSUM_H
-#define _I386_CHECKSUM_H
-
-
-/*
- * computes the checksum of a memory block at buff, length len,
- * and adds in "sum" (32-bit)
- *
- * returns a 32-bit number suitable for feeding into itself
- * or csum_tcpudp_magic
- *
- * this function must be called with even lengths, except
- * for the last fragment, which may be odd
- *
- * it's best to have buff aligned on a 32-bit boundary
- */
-asmlinkage unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
-
-/*
- * the same as csum_partial, but copies from src while it
- * checksums, and handles user-space pointer exceptions correctly, when needed.
- *
- * here even more important to align src and dst on a 32-bit (or even
- * better 64-bit) boundary
- */
-
-asmlinkage unsigned int csum_partial_copy_generic( const char *src, char *dst, int len, int sum,
-                                                  int *src_err_ptr, int *dst_err_ptr);
-
-/*
- *     Note: when you get a NULL pointer exception here this means someone
- *     passed in an incorrect kernel address to one of these functions. 
- *     
- *     If you use these functions directly please don't forget the 
- *     verify_area().
- */
-static __inline__
-unsigned int csum_partial_copy_nocheck ( const char *src, char *dst,
-                                       int len, int sum)
-{
-       return csum_partial_copy_generic ( src, dst, len, sum, NULL, NULL);
-}
-
-static __inline__
-unsigned int csum_partial_copy_from_user ( const char *src, char *dst,
-                                               int len, int sum, int *err_ptr)
-{
-       return csum_partial_copy_generic ( src, dst, len, sum, err_ptr, NULL);
-}
-
-/*
- * These are the old (and unsafe) way of doing checksums, a warning message will be
- * printed if they are used and an exeption occurs.
- *
- * these functions should go away after some time.
- */
-
-#define csum_partial_copy_fromuser csum_partial_copy
-unsigned int csum_partial_copy( const char *src, char *dst, int len, int sum);
-
-/*
- *     This is a version of ip_compute_csum() optimized for IP headers,
- *     which always checksum on 4 octet boundaries.
- *
- *     By Jorge Cwik <jorge@laser.satlink.net>, adapted for linux by
- *     Arnt Gulbrandsen.
- */
-static inline unsigned short ip_fast_csum(unsigned char * iph,
-                                         unsigned int ihl) {
-       unsigned int sum;
-
-       __asm__ __volatile__("
-           movl (%1), %0
-           subl $4, %2
-           jbe 2f
-           addl 4(%1), %0
-           adcl 8(%1), %0
-           adcl 12(%1), %0
-1:         adcl 16(%1), %0
-           lea 4(%1), %1
-           decl %2
-           jne 1b
-           adcl $0, %0
-           movl %0, %2
-           shrl $16, %0
-           addw %w2, %w0
-           adcl $0, %0
-           notl %0
-2:
-           "
-       /* Since the input registers which are loaded with iph and ipl
-          are modified, we must also specify them as outputs, or gcc
-          will assume they contain their original values. */
-       : "=r" (sum), "=r" (iph), "=r" (ihl)
-       : "1" (iph), "2" (ihl));
-       return(sum);
-}
-
-/*
- *     Fold a partial checksum
- */
-
-static inline unsigned int csum_fold(unsigned int sum)
-{
-       __asm__("
-               addl %1, %0
-               adcl $0xffff, %0
-               "
-               : "=r" (sum)
-               : "r" (sum << 16), "0" (sum & 0xffff0000)
-       );
-       return (~sum) >> 16;
-}
-static inline unsigned long csum_tcpudp_nofold(unsigned long saddr,
-                                                  unsigned long daddr,
-                                                  unsigned short len,
-                                                  unsigned short proto,
-                                                  unsigned int sum) 
-{
-    __asm__("
-       addl %1, %0
-       adcl %2, %0
-       adcl %3, %0
-       adcl $0, %0
-       "
-       : "=r" (sum)
-       : "g" (daddr), "g"(saddr), "g"((ntohs(len)<<16)+proto*256), "0"(sum));
-    return sum;
-}
-
-/*
- * computes the checksum of the TCP/UDP pseudo-header
- * returns a 16-bit checksum, already complemented
- */
-static inline unsigned short int csum_tcpudp_magic(unsigned long saddr,
-                                                  unsigned long daddr,
-                                                  unsigned short len,
-                                                  unsigned short proto,
-                                                  unsigned int sum) 
-{
-       return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
-}
-
-/*
- * this routine is used for miscellaneous IP-like checksums, mainly
- * in icmp.c
- */
-
-static inline unsigned short ip_compute_csum(unsigned char * buff, int len) {
-    return csum_fold (csum_partial(buff, len, 0));
-}
-
-#define _HAVE_ARCH_IPV6_CSUM
-static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
-                                                    struct in6_addr *daddr,
-                                                    __u32 len,
-                                                    unsigned short proto,
-                                                    unsigned int sum) 
-{
-       __asm__("
-               addl 0(%1), %0
-               adcl 4(%1), %0
-               adcl 8(%1), %0
-               adcl 12(%1), %0
-               adcl 0(%2), %0
-               adcl 4(%2), %0
-               adcl 8(%2), %0
-               adcl 12(%2), %0
-               adcl %3, %0
-               adcl %4, %0
-               adcl $0, %0
-               "
-               : "=&r" (sum)
-               : "r" (saddr), "r" (daddr), 
-                 "r"(htonl(len)), "r"(htonl(proto)), "0"(sum));
-
-       return csum_fold(sum);
-}
-
-/* 
- *     Copy and checksum to user
- */
-#define HAVE_CSUM_COPY_USER
-static __inline__ unsigned int csum_and_copy_to_user (const char *src, char *dst,
-                                   int len, int sum, int *err_ptr)
-{
-       if (access_ok(VERIFY_WRITE, dst, len))
-               return csum_partial_copy_generic(src, dst, len, sum, NULL, err_ptr);
-
-       if (len)
-               *err_ptr = -EFAULT;
-
-       return -1; /* invalid checksum */
-}
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/cpufeature.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/cpufeature.h
deleted file mode 100644 (file)
index 598edbd..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * cpufeature.h
- *
- * Defines x86 CPU feature bits
- */
-
-#ifndef __ASM_I386_CPUFEATURE_H
-#define __ASM_I386_CPUFEATURE_H
-
-/* Sample usage: CPU_FEATURE_P(cpu.x86_capability, FPU) */
-#define CPU_FEATURE_P(CAP, FEATURE) test_bit(CAP, X86_FEATURE_##FEATURE ##_BIT)
-
-#define NCAPINTS       4       /* Currently we have 4 32-bit words worth of info */
-
-/* Intel-defined CPU features, CPUID level 0x00000001, word 0 */
-#define X86_FEATURE_FPU                (0*32+ 0) /* Onboard FPU */
-#define X86_FEATURE_VME                (0*32+ 1) /* Virtual Mode Extensions */
-#define X86_FEATURE_DE         (0*32+ 2) /* Debugging Extensions */
-#define X86_FEATURE_PSE        (0*32+ 3) /* Page Size Extensions */
-#define X86_FEATURE_TSC                (0*32+ 4) /* Time Stamp Counter */
-#define X86_FEATURE_MSR                (0*32+ 5) /* Model-Specific Registers, RDMSR, WRMSR */
-#define X86_FEATURE_PAE                (0*32+ 6) /* Physical Address Extensions */
-#define X86_FEATURE_MCE                (0*32+ 7) /* Machine Check Architecture */
-#define X86_FEATURE_CX8                (0*32+ 8) /* CMPXCHG8 instruction */
-#define X86_FEATURE_APIC       (0*32+ 9) /* Onboard APIC */
-#define X86_FEATURE_SEP                (0*32+11) /* SYSENTER/SYSEXIT */
-#define X86_FEATURE_MTRR       (0*32+12) /* Memory Type Range Registers */
-#define X86_FEATURE_PGE                (0*32+13) /* Page Global Enable */
-#define X86_FEATURE_MCA                (0*32+14) /* Machine Check Architecture */
-#define X86_FEATURE_CMOV       (0*32+15) /* CMOV instruction (FCMOVCC and FCOMI too if FPU present) */
-#define X86_FEATURE_PAT                (0*32+16) /* Page Attribute Table */
-#define X86_FEATURE_PSE36      (0*32+17) /* 36-bit PSEs */
-#define X86_FEATURE_PN         (0*32+18) /* Processor serial number */
-#define X86_FEATURE_CLFLSH     (0*32+19) /* Supports the CLFLUSH instruction */
-#define X86_FEATURE_DTES       (0*32+21) /* Debug Trace Store */
-#define X86_FEATURE_ACPI       (0*32+22) /* ACPI via MSR */
-#define X86_FEATURE_MMX                (0*32+23) /* Multimedia Extensions */
-#define X86_FEATURE_FXSR       (0*32+24) /* FXSAVE and FXRSTOR instructions (fast save and restore */
-                                         /* of FPU context), and CR4.OSFXSR available */
-#define X86_FEATURE_XMM                (0*32+25) /* Streaming SIMD Extensions */
-#define X86_FEATURE_XMM2       (0*32+26) /* Streaming SIMD Extensions-2 */
-#define X86_FEATURE_SELFSNOOP  (0*32+27) /* CPU self snoop */
-#define X86_FEATURE_ACC                (0*32+29) /* Automatic clock control */
-#define X86_FEATURE_IA64       (0*32+30) /* IA-64 processor */
-
-/* AMD-defined CPU features, CPUID level 0x80000001, word 1 */
-/* Don't duplicate feature flags which are redundant with Intel! */
-#define X86_FEATURE_SYSCALL    (1*32+11) /* SYSCALL/SYSRET */
-#define X86_FEATURE_MMXEXT     (1*32+22) /* AMD MMX extensions */
-#define X86_FEATURE_LM         (1*32+29) /* Long Mode (x86-64) */
-#define X86_FEATURE_3DNOWEXT   (1*32+30) /* AMD 3DNow! extensions */
-#define X86_FEATURE_3DNOW      (1*32+31) /* 3DNow! */
-
-/* Transmeta-defined CPU features, CPUID level 0x80860001, word 2 */
-#define X86_FEATURE_RECOVERY   (2*32+ 0) /* CPU in recovery mode */
-#define X86_FEATURE_LONGRUN    (2*32+ 1) /* Longrun power control */
-#define X86_FEATURE_LRTI       (2*32+ 3) /* LongRun table interface */
-
-/* Other features, Linux-defined mapping, word 3 */
-/* This range is used for feature bits which conflict or are synthesized */
-#define X86_FEATURE_CXMMX      (3*32+ 0) /* Cyrix MMX extensions */
-#define X86_FEATURE_K6_MTRR    (3*32+ 1) /* AMD K6 nonstandard MTRRs */
-#define X86_FEATURE_CYRIX_ARR  (3*32+ 2) /* Cyrix ARRs (= MTRRs) */
-#define X86_FEATURE_CENTAUR_MCR        (3*32+ 3) /* Centaur MCRs (= MTRRs) */
-
-#endif /* __ASM_I386_CPUFEATURE_H */
-
-/* 
- * Local Variables:
- * mode:c
- * comment-column:42
- * End:
- */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/current.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/current.h
deleted file mode 100644 (file)
index bc1496a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _I386_CURRENT_H
-#define _I386_CURRENT_H
-
-struct task_struct;
-
-static inline struct task_struct * get_current(void)
-{
-       struct task_struct *current;
-       __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
-       return current;
- }
-#define current get_current()
-
-#endif /* !(_I386_CURRENT_H) */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/debugreg.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/debugreg.h
deleted file mode 100644 (file)
index f0b2b06..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef _I386_DEBUGREG_H
-#define _I386_DEBUGREG_H
-
-
-/* Indicate the register numbers for a number of the specific
-   debug registers.  Registers 0-3 contain the addresses we wish to trap on */
-#define DR_FIRSTADDR 0        /* u_debugreg[DR_FIRSTADDR] */
-#define DR_LASTADDR 3         /* u_debugreg[DR_LASTADDR]  */
-
-#define DR_STATUS 6           /* u_debugreg[DR_STATUS]     */
-#define DR_CONTROL 7          /* u_debugreg[DR_CONTROL] */
-
-/* Define a few things for the status register.  We can use this to determine
-   which debugging register was responsible for the trap.  The other bits
-   are either reserved or not of interest to us. */
-
-#define DR_TRAP0       (0x1)           /* db0 */
-#define DR_TRAP1       (0x2)           /* db1 */
-#define DR_TRAP2       (0x4)           /* db2 */
-#define DR_TRAP3       (0x8)           /* db3 */
-
-#define DR_STEP                (0x4000)        /* single-step */
-#define DR_SWITCH      (0x8000)        /* task switch */
-
-/* Now define a bunch of things for manipulating the control register.
-   The top two bytes of the control register consist of 4 fields of 4
-   bits - each field corresponds to one of the four debug registers,
-   and indicates what types of access we trap on, and how large the data
-   field is that we are looking at */
-
-#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */
-#define DR_CONTROL_SIZE 4   /* 4 control bits per register */
-
-#define DR_RW_EXECUTE (0x0)   /* Settings for the access types to trap on */
-#define DR_RW_WRITE (0x1)
-#define DR_RW_READ (0x3)
-
-#define DR_LEN_1 (0x0) /* Settings for data length to trap on */
-#define DR_LEN_2 (0x4)
-#define DR_LEN_4 (0xC)
-
-/* The low byte to the control register determine which registers are
-   enabled.  There are 4 fields of two bits.  One bit is "local", meaning
-   that the processor will reset the bit after a task switch and the other
-   is global meaning that we have to explicitly reset the bit.  With linux,
-   you can use either one, since we explicitly zero the register when we enter
-   kernel mode. */
-
-#define DR_LOCAL_ENABLE_SHIFT 0    /* Extra shift to the local enable bit */
-#define DR_GLOBAL_ENABLE_SHIFT 1   /* Extra shift to the global enable bit */
-#define DR_ENABLE_SIZE 2           /* 2 enable bits per register */
-
-#define DR_LOCAL_ENABLE_MASK (0x55)  /* Set  local bits for all 4 regs */
-#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */
-
-/* The second byte to the control register has a few special things.
-   We can slow the instruction pipeline for instructions coming via the
-   gdt or the ldt if we want to.  I am not sure why this is an advantage */
-
-#define DR_CONTROL_RESERVED (0xFC00) /* Reserved by Intel */
-#define DR_LOCAL_SLOWDOWN (0x100)   /* Local slow the pipeline */
-#define DR_GLOBAL_SLOWDOWN (0x200)  /* Global slow the pipeline */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/delay.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/delay.h
deleted file mode 100644 (file)
index c7d2184..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _I386_DELAY_H
-#define _I386_DELAY_H
-
-/*
- * Copyright (C) 1993 Linus Torvalds
- *
- * Delay routines calling functions in arch/i386/lib/delay.c
- */
-extern void __bad_udelay(void);
-
-extern void __udelay(unsigned long usecs);
-extern void __const_udelay(unsigned long usecs);
-extern void __delay(unsigned long loops);
-
-#define udelay(n) (__builtin_constant_p(n) ? \
-       ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c6ul)) : \
-       __udelay(n))
-
-#endif /* defined(_I386_DELAY_H) */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/desc.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/desc.h
deleted file mode 100644 (file)
index 1920de0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __ARCH_DESC_H
-#define __ARCH_DESC_H
-
-#include <asm/ldt.h>
-
-#define __LDT(_X)     (0)
-
-#define clear_LDT()   ((void)0)
-#define load_LDT(_mm) ((void)0)
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/div64.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/div64.h
deleted file mode 100644 (file)
index ef915df..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __I386_DIV64
-#define __I386_DIV64
-
-#define do_div(n,base) ({ \
-       unsigned long __upper, __low, __high, __mod; \
-       asm("":"=a" (__low), "=d" (__high):"A" (n)); \
-       __upper = __high; \
-       if (__high) { \
-               __upper = __high % (base); \
-               __high = __high / (base); \
-       } \
-       asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (base), "0" (__low), "1" (__upper)); \
-       asm("":"=A" (n):"a" (__low),"d" (__high)); \
-       __mod; \
-})
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/dma.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/dma.h
deleted file mode 100644 (file)
index 1bc9899..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-/* $Id: dma.h,v 1.7 1992/12/14 00:29:34 root Exp root $
- * linux/include/asm/dma.h: Defines for using and allocating dma channels.
- * Written by Hennus Bergman, 1992.
- * High DMA channel support & info by Hannu Savolainen
- * and John Boyd, Nov. 1992.
- */
-
-#ifndef _ASM_DMA_H
-#define _ASM_DMA_H
-
-#include <linux/config.h>
-#include <linux/spinlock.h>    /* And spinlocks */
-#include <asm/io.h>            /* need byte IO */
-#include <linux/delay.h>
-
-
-#ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER
-#define dma_outb       outb_p
-#else
-#define dma_outb       outb
-#endif
-
-#define dma_inb                inb
-
-/*
- * NOTES about DMA transfers:
- *
- *  controller 1: channels 0-3, byte operations, ports 00-1F
- *  controller 2: channels 4-7, word operations, ports C0-DF
- *
- *  - ALL registers are 8 bits only, regardless of transfer size
- *  - channel 4 is not used - cascades 1 into 2.
- *  - channels 0-3 are byte - addresses/counts are for physical bytes
- *  - channels 5-7 are word - addresses/counts are for physical words
- *  - transfers must not cross physical 64K (0-3) or 128K (5-7) boundaries
- *  - transfer count loaded to registers is 1 less than actual count
- *  - controller 2 offsets are all even (2x offsets for controller 1)
- *  - page registers for 5-7 don't use data bit 0, represent 128K pages
- *  - page registers for 0-3 use bit 0, represent 64K pages
- *
- * DMA transfers are limited to the lower 16MB of _physical_ memory.  
- * Note that addresses loaded into registers must be _physical_ addresses,
- * not logical addresses (which may differ if paging is active).
- *
- *  Address mapping for channels 0-3:
- *
- *   A23 ... A16 A15 ... A8  A7 ... A0    (Physical addresses)
- *    |  ...  |   |  ... |   |  ... |
- *    |  ...  |   |  ... |   |  ... |
- *    |  ...  |   |  ... |   |  ... |
- *   P7  ...  P0  A7 ... A0  A7 ... A0   
- * |    Page    | Addr MSB | Addr LSB |   (DMA registers)
- *
- *  Address mapping for channels 5-7:
- *
- *   A23 ... A17 A16 A15 ... A9 A8 A7 ... A1 A0    (Physical addresses)
- *    |  ...  |   \   \   ... \  \  \  ... \  \
- *    |  ...  |    \   \   ... \  \  \  ... \  (not used)
- *    |  ...  |     \   \   ... \  \  \  ... \
- *   P7  ...  P1 (0) A7 A6  ... A0 A7 A6 ... A0   
- * |      Page      |  Addr MSB   |  Addr LSB  |   (DMA registers)
- *
- * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses
- * and counts _must_ be word-aligned (the lowest address bit is _ignored_ at
- * the hardware level, so odd-byte transfers aren't possible).
- *
- * Transfer count (_not # bytes_) is limited to 64K, represented as actual
- * count - 1 : 64K => 0xFFFF, 1 => 0x0000.  Thus, count is always 1 or more,
- * and up to 128K bytes may be transferred on channels 5-7 in one operation. 
- *
- */
-
-#define MAX_DMA_CHANNELS       8
-
-/* The maximum address that we can perform a DMA transfer to on this platform */
-#define MAX_DMA_ADDRESS      (PAGE_OFFSET+0x1000000)
-
-/* 8237 DMA controllers */
-#define IO_DMA1_BASE   0x00    /* 8 bit slave DMA, channels 0..3 */
-#define IO_DMA2_BASE   0xC0    /* 16 bit master DMA, ch 4(=slave input)..7 */
-
-/* DMA controller registers */
-#define DMA1_CMD_REG           0x08    /* command register (w) */
-#define DMA1_STAT_REG          0x08    /* status register (r) */
-#define DMA1_REQ_REG            0x09    /* request register (w) */
-#define DMA1_MASK_REG          0x0A    /* single-channel mask (w) */
-#define DMA1_MODE_REG          0x0B    /* mode register (w) */
-#define DMA1_CLEAR_FF_REG      0x0C    /* clear pointer flip-flop (w) */
-#define DMA1_TEMP_REG           0x0D    /* Temporary Register (r) */
-#define DMA1_RESET_REG         0x0D    /* Master Clear (w) */
-#define DMA1_CLR_MASK_REG       0x0E    /* Clear Mask */
-#define DMA1_MASK_ALL_REG       0x0F    /* all-channels mask (w) */
-
-#define DMA2_CMD_REG           0xD0    /* command register (w) */
-#define DMA2_STAT_REG          0xD0    /* status register (r) */
-#define DMA2_REQ_REG            0xD2    /* request register (w) */
-#define DMA2_MASK_REG          0xD4    /* single-channel mask (w) */
-#define DMA2_MODE_REG          0xD6    /* mode register (w) */
-#define DMA2_CLEAR_FF_REG      0xD8    /* clear pointer flip-flop (w) */
-#define DMA2_TEMP_REG           0xDA    /* Temporary Register (r) */
-#define DMA2_RESET_REG         0xDA    /* Master Clear (w) */
-#define DMA2_CLR_MASK_REG       0xDC    /* Clear Mask */
-#define DMA2_MASK_ALL_REG       0xDE    /* all-channels mask (w) */
-
-#define DMA_ADDR_0              0x00    /* DMA address registers */
-#define DMA_ADDR_1              0x02
-#define DMA_ADDR_2              0x04
-#define DMA_ADDR_3              0x06
-#define DMA_ADDR_4              0xC0
-#define DMA_ADDR_5              0xC4
-#define DMA_ADDR_6              0xC8
-#define DMA_ADDR_7              0xCC
-
-#define DMA_CNT_0               0x01    /* DMA count registers */
-#define DMA_CNT_1               0x03
-#define DMA_CNT_2               0x05
-#define DMA_CNT_3               0x07
-#define DMA_CNT_4               0xC2
-#define DMA_CNT_5               0xC6
-#define DMA_CNT_6               0xCA
-#define DMA_CNT_7               0xCE
-
-#define DMA_PAGE_0              0x87    /* DMA page registers */
-#define DMA_PAGE_1              0x83
-#define DMA_PAGE_2              0x81
-#define DMA_PAGE_3              0x82
-#define DMA_PAGE_5              0x8B
-#define DMA_PAGE_6              0x89
-#define DMA_PAGE_7              0x8A
-
-#define DMA_MODE_READ  0x44    /* I/O to memory, no autoinit, increment, single mode */
-#define DMA_MODE_WRITE 0x48    /* memory to I/O, no autoinit, increment, single mode */
-#define DMA_MODE_CASCADE 0xC0   /* pass thru DREQ->HRQ, DACK<-HLDA only */
-
-#define DMA_AUTOINIT   0x10
-
-
-extern spinlock_t  dma_spin_lock;
-
-static __inline__ unsigned long claim_dma_lock(void)
-{
-       unsigned long flags;
-       spin_lock_irqsave(&dma_spin_lock, flags);
-       return flags;
-}
-
-static __inline__ void release_dma_lock(unsigned long flags)
-{
-       spin_unlock_irqrestore(&dma_spin_lock, flags);
-}
-
-/* enable/disable a specific DMA channel */
-static __inline__ void enable_dma(unsigned int dmanr)
-{
-       if (dmanr<=3)
-               dma_outb(dmanr,  DMA1_MASK_REG);
-       else
-               dma_outb(dmanr & 3,  DMA2_MASK_REG);
-}
-
-static __inline__ void disable_dma(unsigned int dmanr)
-{
-       if (dmanr<=3)
-               dma_outb(dmanr | 4,  DMA1_MASK_REG);
-       else
-               dma_outb((dmanr & 3) | 4,  DMA2_MASK_REG);
-}
-
-/* Clear the 'DMA Pointer Flip Flop'.
- * Write 0 for LSB/MSB, 1 for MSB/LSB access.
- * Use this once to initialize the FF to a known state.
- * After that, keep track of it. :-)
- * --- In order to do that, the DMA routines below should ---
- * --- only be used while holding the DMA lock ! ---
- */
-static __inline__ void clear_dma_ff(unsigned int dmanr)
-{
-       if (dmanr<=3)
-               dma_outb(0,  DMA1_CLEAR_FF_REG);
-       else
-               dma_outb(0,  DMA2_CLEAR_FF_REG);
-}
-
-/* set mode (above) for a specific DMA channel */
-static __inline__ void set_dma_mode(unsigned int dmanr, char mode)
-{
-       if (dmanr<=3)
-               dma_outb(mode | dmanr,  DMA1_MODE_REG);
-       else
-               dma_outb(mode | (dmanr&3),  DMA2_MODE_REG);
-}
-
-/* Set only the page register bits of the transfer address.
- * This is used for successive transfers when we know the contents of
- * the lower 16 bits of the DMA current address register, but a 64k boundary
- * may have been crossed.
- */
-static __inline__ void set_dma_page(unsigned int dmanr, char pagenr)
-{
-       switch(dmanr) {
-               case 0:
-                       dma_outb(pagenr, DMA_PAGE_0);
-                       break;
-               case 1:
-                       dma_outb(pagenr, DMA_PAGE_1);
-                       break;
-               case 2:
-                       dma_outb(pagenr, DMA_PAGE_2);
-                       break;
-               case 3:
-                       dma_outb(pagenr, DMA_PAGE_3);
-                       break;
-               case 5:
-                       dma_outb(pagenr & 0xfe, DMA_PAGE_5);
-                       break;
-               case 6:
-                       dma_outb(pagenr & 0xfe, DMA_PAGE_6);
-                       break;
-               case 7:
-                       dma_outb(pagenr & 0xfe, DMA_PAGE_7);
-                       break;
-       }
-}
-
-
-/* Set transfer address & page bits for specific DMA channel.
- * Assumes dma flipflop is clear.
- */
-static __inline__ void set_dma_addr(unsigned int dmanr, unsigned int a)
-{
-       set_dma_page(dmanr, a>>16);
-       if (dmanr <= 3)  {
-           dma_outb( a & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE );
-            dma_outb( (a>>8) & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE );
-       }  else  {
-           dma_outb( (a>>1) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE );
-           dma_outb( (a>>9) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE );
-       }
-}
-
-
-/* Set transfer size (max 64k for DMA1..3, 128k for DMA5..7) for
- * a specific DMA channel.
- * You must ensure the parameters are valid.
- * NOTE: from a manual: "the number of transfers is one more
- * than the initial word count"! This is taken into account.
- * Assumes dma flip-flop is clear.
- * NOTE 2: "count" represents _bytes_ and must be even for channels 5-7.
- */
-static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count)
-{
-        count--;
-       if (dmanr <= 3)  {
-           dma_outb( count & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE );
-           dma_outb( (count>>8) & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE );
-        } else {
-           dma_outb( (count>>1) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE );
-           dma_outb( (count>>9) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE );
-        }
-}
-
-
-/* Get DMA residue count. After a DMA transfer, this
- * should return zero. Reading this while a DMA transfer is
- * still in progress will return unpredictable results.
- * If called before the channel has been used, it may return 1.
- * Otherwise, it returns the number of _bytes_ left to transfer.
- *
- * Assumes DMA flip-flop is clear.
- */
-static __inline__ int get_dma_residue(unsigned int dmanr)
-{
-       unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE
-                                        : ((dmanr&3)<<2) + 2 + IO_DMA2_BASE;
-
-       /* using short to get 16-bit wrap around */
-       unsigned short count;
-
-       count = 1 + dma_inb(io_port);
-       count += dma_inb(io_port) << 8;
-       
-       return (dmanr<=3)? count : (count<<1);
-}
-
-
-/* These are in kernel/dma.c: */
-extern int request_dma(unsigned int dmanr, const char * device_id);    /* reserve a DMA channel */
-extern void free_dma(unsigned int dmanr);      /* release it again */
-
-/* From PCI */
-
-#ifdef CONFIG_PCI
-extern int isa_dma_bridge_buggy;
-#else
-#define isa_dma_bridge_buggy   (0)
-#endif
-
-#endif /* _ASM_DMA_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/elf.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/elf.h
deleted file mode 100644 (file)
index 9b14bcf..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef __ASMi386_ELF_H
-#define __ASMi386_ELF_H
-
-/*
- * ELF register definitions..
- */
-
-#include <asm/ptrace.h>
-#include <asm/user.h>
-
-#include <linux/utsname.h>
-
-typedef unsigned long elf_greg_t;
-
-#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
-typedef elf_greg_t elf_gregset_t[ELF_NGREG];
-
-typedef struct user_i387_struct elf_fpregset_t;
-typedef struct user_fxsr_struct elf_fpxregset_t;
-
-/*
- * This is used to ensure we don't load something for the wrong architecture.
- */
-#define elf_check_arch(x) \
-       (((x)->e_machine == EM_386) || ((x)->e_machine == EM_486))
-
-/*
- * These are used to set parameters in the core dumps.
- */
-#define ELF_CLASS      ELFCLASS32
-#define ELF_DATA       ELFDATA2LSB
-#define ELF_ARCH       EM_386
-
-/* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program starts %edx
-   contains a pointer to a function which might be registered using `atexit'.
-   This provides a mean for the dynamic linker to call DT_FINI functions for
-   shared libraries that have been loaded before the code runs.
-
-   A value of 0 tells we have no such handler. 
-
-   We might as well make sure everything else is cleared too (except for %esp),
-   just to make things more deterministic.
- */
-#define ELF_PLAT_INIT(_r)      do { \
-       _r->ebx = 0; _r->ecx = 0; _r->edx = 0; \
-       _r->esi = 0; _r->edi = 0; _r->ebp = 0; \
-       _r->eax = 0; \
-} while (0)
-
-#define USE_ELF_CORE_DUMP
-#define ELF_EXEC_PAGESIZE      4096
-
-/* This is the location that an ET_DYN program is loaded if exec'ed.  Typical
-   use of this is to invoke "./ld.so someprog" to test out a new version of
-   the loader.  We need to make sure that it is out of the way of the program
-   that it will "exec", and that there is sufficient room for the brk.  */
-
-#define ELF_ET_DYN_BASE         (TASK_SIZE / 3 * 2)
-
-/* Wow, the "main" arch needs arch dependent functions too.. :) */
-
-/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
-   now struct_user_regs, they are different) */
-
-#define ELF_CORE_COPY_REGS(pr_reg, regs)               \
-       pr_reg[0] = regs->ebx;                          \
-       pr_reg[1] = regs->ecx;                          \
-       pr_reg[2] = regs->edx;                          \
-       pr_reg[3] = regs->esi;                          \
-       pr_reg[4] = regs->edi;                          \
-       pr_reg[5] = regs->ebp;                          \
-       pr_reg[6] = regs->eax;                          \
-       pr_reg[7] = regs->xds;                          \
-       pr_reg[8] = regs->xes;                          \
-       /* fake once used fs and gs selectors? */       \
-       pr_reg[9] = regs->xds;  /* was fs and __fs */   \
-       pr_reg[10] = regs->xds; /* was gs and __gs */   \
-       pr_reg[11] = regs->orig_eax;                    \
-       pr_reg[12] = regs->eip;                         \
-       pr_reg[13] = regs->xcs;                         \
-       pr_reg[14] = regs->eflags;                      \
-       pr_reg[15] = regs->esp;                         \
-       pr_reg[16] = regs->xss;
-
-/* This yields a mask that user programs can use to figure out what
-   instruction set this CPU supports.  This could be done in user space,
-   but it's not easy, and we've already done it here.  */
-
-#define ELF_HWCAP      (boot_cpu_data.x86_capability[0])
-
-/* This yields a string that ld.so will use to load implementation
-   specific libraries for optimization.  This is more specific in
-   intent than poking at uname or /proc/cpuinfo.
-
-   For the moment, we have only optimizations for the Intel generations,
-   but that could change... */
-
-#define ELF_PLATFORM  (system_utsname.machine)
-
-#ifdef __KERNEL__
-#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
-#endif
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/errno.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/errno.h
deleted file mode 100644 (file)
index 7cf599f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef _I386_ERRNO_H
-#define _I386_ERRNO_H
-
-#define        EPERM            1      /* Operation not permitted */
-#define        ENOENT           2      /* No such file or directory */
-#define        ESRCH            3      /* No such process */
-#define        EINTR            4      /* Interrupted system call */
-#define        EIO              5      /* I/O error */
-#define        ENXIO            6      /* No such device or address */
-#define        E2BIG            7      /* Arg list too long */
-#define        ENOEXEC          8      /* Exec format error */
-#define        EBADF            9      /* Bad file number */
-#define        ECHILD          10      /* No child processes */
-#define        EAGAIN          11      /* Try again */
-#define        ENOMEM          12      /* Out of memory */
-#define        EACCES          13      /* Permission denied */
-#define        EFAULT          14      /* Bad address */
-#define        ENOTBLK         15      /* Block device required */
-#define        EBUSY           16      /* Device or resource busy */
-#define        EEXIST          17      /* File exists */
-#define        EXDEV           18      /* Cross-device link */
-#define        ENODEV          19      /* No such device */
-#define        ENOTDIR         20      /* Not a directory */
-#define        EISDIR          21      /* Is a directory */
-#define        EINVAL          22      /* Invalid argument */
-#define        ENFILE          23      /* File table overflow */
-#define        EMFILE          24      /* Too many open files */
-#define        ENOTTY          25      /* Not a typewriter */
-#define        ETXTBSY         26      /* Text file busy */
-#define        EFBIG           27      /* File too large */
-#define        ENOSPC          28      /* No space left on device */
-#define        ESPIPE          29      /* Illegal seek */
-#define        EROFS           30      /* Read-only file system */
-#define        EMLINK          31      /* Too many links */
-#define        EPIPE           32      /* Broken pipe */
-#define        EDOM            33      /* Math argument out of domain of func */
-#define        ERANGE          34      /* Math result not representable */
-#define        EDEADLK         35      /* Resource deadlock would occur */
-#define        ENAMETOOLONG    36      /* File name too long */
-#define        ENOLCK          37      /* No record locks available */
-#define        ENOSYS          38      /* Function not implemented */
-#define        ENOTEMPTY       39      /* Directory not empty */
-#define        ELOOP           40      /* Too many symbolic links encountered */
-#define        EWOULDBLOCK     EAGAIN  /* Operation would block */
-#define        ENOMSG          42      /* No message of desired type */
-#define        EIDRM           43      /* Identifier removed */
-#define        ECHRNG          44      /* Channel number out of range */
-#define        EL2NSYNC        45      /* Level 2 not synchronized */
-#define        EL3HLT          46      /* Level 3 halted */
-#define        EL3RST          47      /* Level 3 reset */
-#define        ELNRNG          48      /* Link number out of range */
-#define        EUNATCH         49      /* Protocol driver not attached */
-#define        ENOCSI          50      /* No CSI structure available */
-#define        EL2HLT          51      /* Level 2 halted */
-#define        EBADE           52      /* Invalid exchange */
-#define        EBADR           53      /* Invalid request descriptor */
-#define        EXFULL          54      /* Exchange full */
-#define        ENOANO          55      /* No anode */
-#define        EBADRQC         56      /* Invalid request code */
-#define        EBADSLT         57      /* Invalid slot */
-
-#define        EDEADLOCK       EDEADLK
-
-#define        EBFONT          59      /* Bad font file format */
-#define        ENOSTR          60      /* Device not a stream */
-#define        ENODATA         61      /* No data available */
-#define        ETIME           62      /* Timer expired */
-#define        ENOSR           63      /* Out of streams resources */
-#define        ENONET          64      /* Machine is not on the network */
-#define        ENOPKG          65      /* Package not installed */
-#define        EREMOTE         66      /* Object is remote */
-#define        ENOLINK         67      /* Link has been severed */
-#define        EADV            68      /* Advertise error */
-#define        ESRMNT          69      /* Srmount error */
-#define        ECOMM           70      /* Communication error on send */
-#define        EPROTO          71      /* Protocol error */
-#define        EMULTIHOP       72      /* Multihop attempted */
-#define        EDOTDOT         73      /* RFS specific error */
-#define        EBADMSG         74      /* Not a data message */
-#define        EOVERFLOW       75      /* Value too large for defined data type */
-#define        ENOTUNIQ        76      /* Name not unique on network */
-#define        EBADFD          77      /* File descriptor in bad state */
-#define        EREMCHG         78      /* Remote address changed */
-#define        ELIBACC         79      /* Can not access a needed shared library */
-#define        ELIBBAD         80      /* Accessing a corrupted shared library */
-#define        ELIBSCN         81      /* .lib section in a.out corrupted */
-#define        ELIBMAX         82      /* Attempting to link in too many shared libraries */
-#define        ELIBEXEC        83      /* Cannot exec a shared library directly */
-#define        EILSEQ          84      /* Illegal byte sequence */
-#define        ERESTART        85      /* Interrupted system call should be restarted */
-#define        ESTRPIPE        86      /* Streams pipe error */
-#define        EUSERS          87      /* Too many users */
-#define        ENOTSOCK        88      /* Socket operation on non-socket */
-#define        EDESTADDRREQ    89      /* Destination address required */
-#define        EMSGSIZE        90      /* Message too long */
-#define        EPROTOTYPE      91      /* Protocol wrong type for socket */
-#define        ENOPROTOOPT     92      /* Protocol not available */
-#define        EPROTONOSUPPORT 93      /* Protocol not supported */
-#define        ESOCKTNOSUPPORT 94      /* Socket type not supported */
-#define        EOPNOTSUPP      95      /* Operation not supported on transport endpoint */
-#define        EPFNOSUPPORT    96      /* Protocol family not supported */
-#define        EAFNOSUPPORT    97      /* Address family not supported by protocol */
-#define        EADDRINUSE      98      /* Address already in use */
-#define        EADDRNOTAVAIL   99      /* Cannot assign requested address */
-#define        ENETDOWN        100     /* Network is down */
-#define        ENETUNREACH     101     /* Network is unreachable */
-#define        ENETRESET       102     /* Network dropped connection because of reset */
-#define        ECONNABORTED    103     /* Software caused connection abort */
-#define        ECONNRESET      104     /* Connection reset by peer */
-#define        ENOBUFS         105     /* No buffer space available */
-#define        EISCONN         106     /* Transport endpoint is already connected */
-#define        ENOTCONN        107     /* Transport endpoint is not connected */
-#define        ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */
-#define        ETOOMANYREFS    109     /* Too many references: cannot splice */
-#define        ETIMEDOUT       110     /* Connection timed out */
-#define        ECONNREFUSED    111     /* Connection refused */
-#define        EHOSTDOWN       112     /* Host is down */
-#define        EHOSTUNREACH    113     /* No route to host */
-#define        EALREADY        114     /* Operation already in progress */
-#define        EINPROGRESS     115     /* Operation now in progress */
-#define        ESTALE          116     /* Stale NFS file handle */
-#define        EUCLEAN         117     /* Structure needs cleaning */
-#define        ENOTNAM         118     /* Not a XENIX named type file */
-#define        ENAVAIL         119     /* No XENIX semaphores available */
-#define        EISNAM          120     /* Is a named type file */
-#define        EREMOTEIO       121     /* Remote I/O error */
-#define        EDQUOT          122     /* Quota exceeded */
-
-#define        ENOMEDIUM       123     /* No medium found */
-#define        EMEDIUMTYPE     124     /* Wrong medium type */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/fcntl.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/fcntl.h
deleted file mode 100644 (file)
index 41e3c4d..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef _I386_FCNTL_H
-#define _I386_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/fixmap.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/fixmap.h
deleted file mode 100644 (file)
index d9a10f2..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * fixmap.h: compile-time virtual memory allocation
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1998 Ingo Molnar
- *
- * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
- */
-
-#ifndef _ASM_FIXMAP_H
-#define _ASM_FIXMAP_H
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <asm/apicdef.h>
-#include <asm/page.h>
-
-/*
- * Here we define all the compile-time 'special' virtual
- * addresses. The point is to have a constant address at
- * compile time, but to set the physical address only
- * in the boot process. We allocate these special  addresses
- * from the end of virtual memory (0xfffff000) backwards.
- * Also this lets us do fail-safe vmalloc(), we
- * can guarantee that these special addresses and
- * vmalloc()-ed addresses never overlap.
- *
- * these 'compile-time allocated' memory buffers are
- * fixed-size 4k pages. (or larger if used with an increment
- * highger than 1) use fixmap_set(idx,phys) to associate
- * physical memory with fixmap indices.
- *
- * TLB entries of such buffers will not be flushed across
- * task switches.
- */
-enum fixed_addresses {
-    FIX_BLKRING_BASE,
-    __end_of_fixed_addresses
-};
-
-extern void __set_fixmap (enum fixed_addresses idx,
-                                       unsigned long phys, pgprot_t flags);
-
-#define set_fixmap(idx, phys) \
-               __set_fixmap(idx, phys, PAGE_KERNEL)
-/*
- * Some hardware wants to get fixmapped without caching.
- */
-#define set_fixmap_nocache(idx, phys) \
-               __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)
-/*
- * used by vmalloc.c.
- *
- * Leave one empty page between vmalloc'ed areas and
- * the start of the fixmap, and leave one page empty
- * at the top of mem..
- */
-#define FIXADDR_TOP    (HYPERVISOR_VIRT_START - 2*PAGE_SIZE)
-#define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
-#define FIXADDR_START  (FIXADDR_TOP - __FIXADDR_SIZE)
-
-#define __fix_to_virt(x)       (FIXADDR_TOP - ((x) << PAGE_SHIFT))
-
-extern void __this_fixmap_does_not_exist(void);
-
-/*
- * 'index to address' translation. If anyone tries to use the idx
- * directly without tranlation, we catch the bug with a NULL-deference
- * kernel oops. Illegal ranges of incoming indices are caught too.
- */
-static inline unsigned long fix_to_virt(const unsigned int idx)
-{
-       /*
-        * this branch gets completely eliminated after inlining,
-        * except when someone tries to use fixaddr indices in an
-        * illegal way. (such as mixing up address types or using
-        * out-of-range indices).
-        *
-        * If it doesn't get removed, the linker will complain
-        * loudly with a reasonably clear error message..
-        */
-       if (idx >= __end_of_fixed_addresses)
-               __this_fixmap_does_not_exist();
-
-        return __fix_to_virt(idx);
-}
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/floppy.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/floppy.h
deleted file mode 100644 (file)
index 62f9fd8..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Architecture specific parts of the Floppy driver
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1995
- */
-#ifndef __ASM_I386_FLOPPY_H
-#define __ASM_I386_FLOPPY_H
-
-#include <linux/vmalloc.h>
-
-
-/*
- * The DMA channel used by the floppy controller cannot access data at
- * addresses >= 16MB
- *
- * Went back to the 1MB limit, as some people had problems with the floppy
- * driver otherwise. It doesn't matter much for performance anyway, as most
- * floppy accesses go through the track buffer.
- */
-#define _CROSS_64KB(a,s,vdma) \
-(!vdma && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64))
-
-#define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1)
-
-
-#define SW fd_routine[use_virtual_dma&1]
-#define CSW fd_routine[can_use_virtual_dma & 1]
-
-
-#define fd_inb(port)                   inb_p(port)
-#define fd_outb(port,value)            outb_p(port,value)
-
-#define fd_request_dma()        CSW._request_dma(FLOPPY_DMA,"floppy")
-#define fd_free_dma()           CSW._free_dma(FLOPPY_DMA)
-#define fd_enable_irq()         enable_irq(FLOPPY_IRQ)
-#define fd_disable_irq()        disable_irq(FLOPPY_IRQ)
-#define fd_free_irq()          free_irq(FLOPPY_IRQ, NULL)
-#define fd_get_dma_residue()    SW._get_dma_residue(FLOPPY_DMA)
-#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size)
-#define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io)
-
-#define FLOPPY_CAN_FALLBACK_ON_NODMA
-
-static int virtual_dma_count;
-static int virtual_dma_residue;
-static char *virtual_dma_addr;
-static int virtual_dma_mode;
-static int doing_pdma;
-
-static void floppy_hardint(int irq, void *dev_id, struct pt_regs * regs)
-{
-       register unsigned char st;
-
-#undef TRACE_FLPY_INT
-#define NO_FLOPPY_ASSEMBLER
-
-#ifdef TRACE_FLPY_INT
-       static int calls=0;
-       static int bytes=0;
-       static int dma_wait=0;
-#endif
-       if(!doing_pdma) {
-               floppy_interrupt(irq, dev_id, regs);
-               return;
-       }
-
-#ifdef TRACE_FLPY_INT
-       if(!calls)
-               bytes = virtual_dma_count;
-#endif
-
-#ifndef NO_FLOPPY_ASSEMBLER
-       __asm__ (
-       "testl %1,%1
-       je 3f
-1:     inb %w4,%b0
-       andb $160,%b0
-       cmpb $160,%b0
-       jne 2f
-       incw %w4
-       testl %3,%3
-       jne 4f
-       inb %w4,%b0
-       movb %0,(%2)
-       jmp 5f
-4:             movb (%2),%0
-       outb %b0,%w4
-5:     decw %w4
-       outb %0,$0x80
-       decl %1
-       incl %2
-       testl %1,%1
-       jne 1b
-3:     inb %w4,%b0
-2:     "
-       : "=a" ((char) st), 
-       "=c" ((long) virtual_dma_count), 
-       "=S" ((long) virtual_dma_addr)
-       : "b" ((long) virtual_dma_mode),
-       "d" ((short) virtual_dma_port+4), 
-       "1" ((long) virtual_dma_count),
-       "2" ((long) virtual_dma_addr));
-#else  
-       {
-               register int lcount;
-               register char *lptr;
-
-               st = 1;
-               for(lcount=virtual_dma_count, lptr=virtual_dma_addr; 
-                   lcount; lcount--, lptr++) {
-                       st=inb(virtual_dma_port+4) & 0xa0 ;
-                       if(st != 0xa0) 
-                               break;
-                       if(virtual_dma_mode)
-                               outb_p(*lptr, virtual_dma_port+5);
-                       else
-                               *lptr = inb_p(virtual_dma_port+5);
-               }
-               virtual_dma_count = lcount;
-               virtual_dma_addr = lptr;
-               st = inb(virtual_dma_port+4);
-       }
-#endif
-
-#ifdef TRACE_FLPY_INT
-       calls++;
-#endif
-       if(st == 0x20)
-               return;
-       if(!(st & 0x20)) {
-               virtual_dma_residue += virtual_dma_count;
-               virtual_dma_count=0;
-#ifdef TRACE_FLPY_INT
-               printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", 
-                      virtual_dma_count, virtual_dma_residue, calls, bytes,
-                      dma_wait);
-               calls = 0;
-               dma_wait=0;
-#endif
-               doing_pdma = 0;
-               floppy_interrupt(irq, dev_id, regs);
-               return;
-       }
-#ifdef TRACE_FLPY_INT
-       if(!virtual_dma_count)
-               dma_wait++;
-#endif
-}
-
-static void fd_disable_dma(void)
-{
-       if(! (can_use_virtual_dma & 1))
-               disable_dma(FLOPPY_DMA);
-       doing_pdma = 0;
-       virtual_dma_residue += virtual_dma_count;
-       virtual_dma_count=0;
-}
-
-static int vdma_request_dma(unsigned int dmanr, const char * device_id)
-{
-       return 0;
-}
-
-static void vdma_nop(unsigned int dummy)
-{
-}
-
-
-static int vdma_get_dma_residue(unsigned int dummy)
-{
-       return virtual_dma_count + virtual_dma_residue;
-}
-
-
-static int fd_request_irq(void)
-{
-       if(can_use_virtual_dma)
-               return request_irq(FLOPPY_IRQ, floppy_hardint,SA_INTERRUPT,
-                                                  "floppy", NULL);
-       else
-               return request_irq(FLOPPY_IRQ, floppy_interrupt,
-                                                  SA_INTERRUPT|SA_SAMPLE_RANDOM,
-                                                  "floppy", NULL);     
-
-}
-
-static unsigned long dma_mem_alloc(unsigned long size)
-{
-       return __get_dma_pages(GFP_KERNEL,get_order(size));
-}
-
-
-static unsigned long vdma_mem_alloc(unsigned long size)
-{
-       return (unsigned long) vmalloc(size);
-
-}
-
-#define nodma_mem_alloc(size) vdma_mem_alloc(size)
-
-static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
-{
-       if((unsigned int) addr >= (unsigned int) high_memory)
-               return vfree((void *)addr);
-       else
-               free_pages(addr, get_order(size));              
-}
-
-#define fd_dma_mem_free(addr, size)  _fd_dma_mem_free(addr, size) 
-
-static void _fd_chose_dma_mode(char *addr, unsigned long size)
-{
-       if(can_use_virtual_dma == 2) {
-               if((unsigned int) addr >= (unsigned int) high_memory ||
-                  virt_to_bus(addr) >= 0x1000000 ||
-                  _CROSS_64KB(addr, size, 0))
-                       use_virtual_dma = 1;
-               else
-                       use_virtual_dma = 0;
-       } else {
-               use_virtual_dma = can_use_virtual_dma & 1;
-       }
-}
-
-#define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size)
-
-
-static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io)
-{
-       doing_pdma = 1;
-       virtual_dma_port = io;
-       virtual_dma_mode = (mode  == DMA_MODE_WRITE);
-       virtual_dma_addr = addr;
-       virtual_dma_count = size;
-       virtual_dma_residue = 0;
-       return 0;
-}
-
-static int hard_dma_setup(char *addr, unsigned long size, int mode, int io)
-{
-#ifdef FLOPPY_SANITY_CHECK
-       if (CROSS_64KB(addr, size)) {
-               printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size);
-               return -1;
-       }
-#endif
-       /* actual, physical DMA */
-       doing_pdma = 0;
-       clear_dma_ff(FLOPPY_DMA);
-       set_dma_mode(FLOPPY_DMA,mode);
-       set_dma_addr(FLOPPY_DMA,virt_to_bus(addr));
-       set_dma_count(FLOPPY_DMA,size);
-       enable_dma(FLOPPY_DMA);
-       return 0;
-}
-
-struct fd_routine_l {
-       int (*_request_dma)(unsigned int dmanr, const char * device_id);
-       void (*_free_dma)(unsigned int dmanr);
-       int (*_get_dma_residue)(unsigned int dummy);
-       unsigned long (*_dma_mem_alloc) (unsigned long size);
-       int (*_dma_setup)(char *addr, unsigned long size, int mode, int io);
-} fd_routine[] = {
-       {
-               request_dma,
-               free_dma,
-               get_dma_residue,
-               dma_mem_alloc,
-               hard_dma_setup
-       },
-       {
-               vdma_request_dma,
-               vdma_nop,
-               vdma_get_dma_residue,
-               vdma_mem_alloc,
-               vdma_dma_setup
-       }
-};
-
-
-static int FDC1 = 0x3f0;
-static int FDC2 = -1;
-
-/*
- * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock
- * is needed to prevent corrupted CMOS RAM in case "insmod floppy"
- * coincides with another rtc CMOS user.               Paul G.
- */
-#define FLOPPY0_TYPE   ({                              \
-       unsigned long flags;                            \
-       unsigned char val;                              \
-       spin_lock_irqsave(&rtc_lock, flags);            \
-       val = (CMOS_READ(0x10) >> 4) & 15;              \
-       spin_unlock_irqrestore(&rtc_lock, flags);       \
-       val;                                            \
-})
-
-#define FLOPPY1_TYPE   ({                              \
-       unsigned long flags;                            \
-       unsigned char val;                              \
-       spin_lock_irqsave(&rtc_lock, flags);            \
-       val = CMOS_READ(0x10) & 15;                     \
-       spin_unlock_irqrestore(&rtc_lock, flags);       \
-       val;                                            \
-})
-
-#define N_FDC 2
-#define N_DRIVE 8
-
-#define FLOPPY_MOTOR_MASK 0xf0
-
-#define AUTO_DMA
-
-#define EXTRA_FLOPPY_PARAMS
-
-#endif /* __ASM_I386_FLOPPY_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/hardirq.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/hardirq.h
deleted file mode 100644 (file)
index 4acb4b0..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef __ASM_HARDIRQ_H
-#define __ASM_HARDIRQ_H
-
-#include <linux/config.h>
-#include <linux/threads.h>
-#include <linux/irq.h>
-
-/* assembly code in softirq.h is sensitive to the offsets of these fields */
-typedef struct {
-       unsigned int __softirq_pending;
-       unsigned int __local_irq_count;
-       unsigned int __local_bh_count;
-       unsigned int __syscall_count;
-       struct task_struct * __ksoftirqd_task; /* waitqueue is too large */
-       unsigned int __nmi_count;       /* arch dependent */
-} ____cacheline_aligned irq_cpustat_t;
-
-#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
-
-/*
- * Are we in an interrupt context? Either doing bottom half
- * or hardware interrupt processing?
- */
-#define in_interrupt() ({ int __cpu = smp_processor_id(); \
-       (local_irq_count(__cpu) + local_bh_count(__cpu) != 0); })
-
-#define in_irq() (local_irq_count(smp_processor_id()) != 0)
-
-#ifndef CONFIG_SMP
-
-#define hardirq_trylock(cpu)   (local_irq_count(cpu) == 0)
-#define hardirq_endlock(cpu)   do { } while (0)
-
-#define irq_enter(cpu, irq)    (local_irq_count(cpu)++)
-#define irq_exit(cpu, irq)     (local_irq_count(cpu)--)
-
-#define synchronize_irq()      barrier()
-
-#else
-
-#include <asm/atomic.h>
-#include <asm/smp.h>
-
-extern unsigned char global_irq_holder;
-extern unsigned volatile long global_irq_lock; /* long for set_bit -RR */
-
-static inline int irqs_running (void)
-{
-       int i;
-
-       for (i = 0; i < smp_num_cpus; i++)
-               if (local_irq_count(i))
-                       return 1;
-       return 0;
-}
-
-static inline void release_irqlock(int cpu)
-{
-       /* if we didn't own the irq lock, just ignore.. */
-       if (global_irq_holder == (unsigned char) cpu) {
-               global_irq_holder = NO_PROC_ID;
-               clear_bit(0,&global_irq_lock);
-       }
-}
-
-static inline void irq_enter(int cpu, int irq)
-{
-       ++local_irq_count(cpu);
-
-       while (test_bit(0,&global_irq_lock)) {
-               cpu_relax();
-       }
-}
-
-static inline void irq_exit(int cpu, int irq)
-{
-       --local_irq_count(cpu);
-}
-
-static inline int hardirq_trylock(int cpu)
-{
-       return !local_irq_count(cpu) && !test_bit(0,&global_irq_lock);
-}
-
-#define hardirq_endlock(cpu)   do { } while (0)
-
-extern void synchronize_irq(void);
-
-#endif /* CONFIG_SMP */
-
-#endif /* __ASM_HARDIRQ_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/hdreg.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/hdreg.h
deleted file mode 100644 (file)
index 1ad5c07..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- *  linux/include/asm-i386/hdreg.h
- *
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-#ifndef __ASMi386_HDREG_H
-#define __ASMi386_HDREG_H
-
-typedef unsigned short ide_ioreg_t;
-
-#endif /* __ASMi386_HDREG_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/highmem.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/highmem.h
deleted file mode 100644 (file)
index a96b601..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-#error "Highmem unsupported!"
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/hw_irq.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/hw_irq.h
deleted file mode 100644 (file)
index a7303f0..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef _ASM_HW_IRQ_H
-#define _ASM_HW_IRQ_H
-
-/*
- *     linux/include/asm/hw_irq.h
- *
- *     (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
- */
-
-#include <linux/config.h>
-#include <linux/smp.h>
-#include <asm/atomic.h>
-#include <asm/irq.h>
-
-#define SYSCALL_VECTOR         0x80
-#define KDBENTER_VECTOR                0x81
-
-extern int irq_vector[NR_IRQS];
-
-extern atomic_t irq_err_count;
-extern atomic_t irq_mis_count;
-
-extern char _stext, _etext;
-
-extern unsigned long prof_cpu_mask;
-extern unsigned int * prof_buffer;
-extern unsigned long prof_len;
-extern unsigned long prof_shift;
-
-/*
- * x86 profiling function, SMP safe. We might want to do this in
- * assembly totally?
- */
-static inline void x86_do_profile (unsigned long eip)
-{
-        if (!prof_buffer)
-                return;
-
-        /*
-         * Only measure the CPUs specified by /proc/irq/prof_cpu_mask.
-         * (default is all CPUs.)
-         */
-        if (!((1<<smp_processor_id()) & prof_cpu_mask))
-                return;
-
-        eip -= (unsigned long) &_stext;
-        eip >>= prof_shift;
-        /*
-         * Don't ignore out-of-bounds EIP values silently,
-         * put them into the last histogram slot, so if
-         * present, they will show up as a sharp peak.
-         */
-        if (eip > prof_len-1)
-                eip = prof_len-1;
-        atomic_inc((atomic_t *)&prof_buffer[eip]);
-}
-
-static inline void hw_resend_irq(struct hw_interrupt_type *h,
-                                 unsigned int i)
-{}
-
-#endif /* _ASM_HW_IRQ_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h
deleted file mode 100644 (file)
index df25598..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-/******************************************************************************
- * hypervisor.h
- * 
- * Linux-specific hypervisor handling.
- * 
- * Copyright (c) 2002, K A Fraser
- */
-
-#ifndef __HYPERVISOR_H__
-#define __HYPERVISOR_H__
-
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-#include <asm/ptrace.h>
-
-/* arch/xeno/kernel/setup.c */
-union start_info_union
-{
-    start_info_t start_info;
-    char padding[512];
-};
-extern union start_info_union start_info_union;
-#define start_info (start_info_union.start_info)
-
-/* arch/xeno/kernel/hypervisor.c */
-void do_hypervisor_callback(struct pt_regs *regs);
-
-
-/* arch/xeno/mm/hypervisor.c */
-/*
- * NB. ptr values should be PHYSICAL, not MACHINE. 'vals' should be already
- * be MACHINE addresses.
- */
-
-extern unsigned int pt_update_queue_idx;
-
-void queue_l1_entry_update(unsigned long ptr, unsigned long val);
-void queue_l2_entry_update(unsigned long ptr, unsigned long val);
-void queue_pt_switch(unsigned long ptr);
-void queue_tlb_flush(void);
-void queue_invlpg(unsigned long ptr);
-void queue_pgd_pin(unsigned long ptr);
-void queue_pgd_unpin(unsigned long ptr);
-void queue_pte_pin(unsigned long ptr);
-void queue_pte_unpin(unsigned long ptr);
-
-#define PT_UPDATE_DEBUG 0
-
-#if PT_UPDATE_DEBUG > 0
-typedef struct {
-    unsigned long ptr, val, pteval;
-    void *ptep;
-    int line; char *file;
-} page_update_debug_t;
-extern page_update_debug_t update_debug_queue[];
-#define queue_l1_entry_update(_p,_v) ({                           \
- update_debug_queue[pt_update_queue_idx].ptr  = (_p);             \
- update_debug_queue[pt_update_queue_idx].val  = (_v);             \
- update_debug_queue[pt_update_queue_idx].line = __LINE__;         \
- update_debug_queue[pt_update_queue_idx].file = __FILE__;         \
- queue_l1_entry_update((_p),(_v));                                \
-})
-#define queue_l2_entry_update(_p,_v) ({                           \
- update_debug_queue[pt_update_queue_idx].ptr  = (_p);             \
- update_debug_queue[pt_update_queue_idx].val  = (_v);             \
- update_debug_queue[pt_update_queue_idx].line = __LINE__;         \
- update_debug_queue[pt_update_queue_idx].file = __FILE__;         \
- queue_l2_entry_update((_p),(_v));                                \
-})
-#endif
-
-#if PT_UPDATE_DEBUG > 1
-#undef queue_l1_entry_update
-#undef queue_l2_entry_update
-#define queue_l1_entry_update(_p,_v) ({                           \
- update_debug_queue[pt_update_queue_idx].ptr  = (_p);             \
- update_debug_queue[pt_update_queue_idx].val  = (_v);             \
- update_debug_queue[pt_update_queue_idx].line = __LINE__;         \
- update_debug_queue[pt_update_queue_idx].file = __FILE__;         \
- printk("L1 %s %d: %08lx (%08lx -> %08lx)\n", __FILE__, __LINE__, \
-        phys_to_machine(_p), *(unsigned long *)__va(_p),          \
-        (unsigned long)(_v));                                     \
- queue_l1_entry_update((_p),(_v));                                \
-})
-#define queue_l2_entry_update(_p,_v) ({                           \
- update_debug_queue[pt_update_queue_idx].ptr  = (_p);             \
- update_debug_queue[pt_update_queue_idx].val  = (_v);             \
- update_debug_queue[pt_update_queue_idx].line = __LINE__;         \
- update_debug_queue[pt_update_queue_idx].file = __FILE__;         \
- printk("L2 %s %d: %08lx (%08lx -> %08lx)\n", __FILE__, __LINE__, \
-        phys_to_machine(_p), *(unsigned long *)__va(_p),          \
-        (unsigned long)(_v));                                     \
- queue_l2_entry_update((_p),(_v));                                \
-})
-#define queue_pt_switch(_p) ({                                    \
- printk("PTSWITCH %s %d: %08lx\n", __FILE__, __LINE__, (_p));     \
- queue_pt_switch(_p);                                             \
-})   
-#define queue_tlb_flush() ({                                      \
- printk("TLB FLUSH %s %d\n", __FILE__, __LINE__);                 \
- queue_tlb_flush();                                               \
-})   
-#define queue_invlpg(_p) ({                                       \
- printk("INVLPG %s %d: %08lx\n", __FILE__, __LINE__, (_p));       \
- queue_invlpg(_p);                                                \
-})   
-#define queue_pgd_pin(_p) ({                                      \
- printk("PGD PIN %s %d: %08lx\n", __FILE__, __LINE__, (_p));      \
- queue_pgd_pin(_p);                                               \
-})   
-#define queue_pgd_unpin(_p) ({                                    \
- printk("PGD UNPIN %s %d: %08lx\n", __FILE__, __LINE__, (_p));    \
- queue_pgd_unpin(_p);                                             \
-})   
-#define queue_pte_pin(_p) ({                                      \
- printk("PTE PIN %s %d: %08lx\n", __FILE__, __LINE__, (_p));      \
- queue_pte_pin(_p);                                               \
-})   
-#define queue_pte_unpin(_p) ({                                    \
- printk("PTE UNPIN %s %d: %08lx\n", __FILE__, __LINE__, (_p));    \
- queue_pte_unpin(_p);                                             \
-})   
-#endif
-
-void _flush_page_update_queue(void);
-static inline int flush_page_update_queue(void)
-{
-    unsigned int idx = pt_update_queue_idx;
-    if ( idx != 0 ) _flush_page_update_queue();
-    return idx;
-}
-#define XENO_flush_page_update_queue() (_flush_page_update_queue())
-
-
-/*
- * Assembler stubs for hyper-calls.
- */
-
-static inline int HYPERVISOR_set_trap_table(trap_info_t *table)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_trap_table),
-        "b" (table) );
-
-    return ret;
-}
-
-
-static inline int HYPERVISOR_pt_update(page_update_request_t *req, int count)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_pt_update), 
-        "b" (req), "c" (count) );
-
-    return ret;
-}
-
-
-static inline int HYPERVISOR_console_write(const char *str, int count)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_console_write), 
-        "b" (str), "c" (count) );
-
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_gdt(unsigned long *frame_list, int entries)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_gdt), 
-        "b" (frame_list), "c" (entries) );
-
-
-    return ret;
-}
-
-static inline int HYPERVISOR_stack_and_ldt_switch(
-    unsigned long ss, unsigned long esp, unsigned long ldts)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_stack_and_ldt_switch),
-        "b" (ss), "c" (esp), "d" (ldts) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_net_update(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_net_update) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_fpu_taskswitch(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_do_sched_op(void *sched_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_sched_op),
-        "b" (sched_op) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_exit(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_exit) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_dom0_op(void *dom0_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_dom0_op),
-        "b" (dom0_op) : "memory" );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_network_op(void *network_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_network_op),
-        "b" (network_op) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_block_io_op(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_block_io_op) ); 
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_debugreg(int reg, unsigned long value)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_debugreg),
-        "b" (reg), "c" (value) );
-
-    return ret;
-}
-
-static inline unsigned long HYPERVISOR_get_debugreg(int reg)
-{
-    unsigned long ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_get_debugreg),
-        "b" (reg) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_update_descriptor(
-    unsigned long pa, unsigned long word1, unsigned long word2)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_gdt), 
-        "b" (pa), "c" (word1), "d" (word2) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_fast_trap(int idx)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_fast_trap), 
-        "b" (idx) );
-
-    return ret;
-}
-
-#endif /* __HYPERVISOR_H__ */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/i387.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/i387.h
deleted file mode 100644 (file)
index 1cf8dc2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * include/asm-i386/i387.h
- *
- * Copyright (C) 1994 Linus Torvalds
- *
- * Pentium III FXSR, SSE support
- * General FPU state handling cleanups
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-#ifndef __ASM_I386_I387_H
-#define __ASM_I386_I387_H
-
-#include <linux/sched.h>
-#include <asm/processor.h>
-#include <asm/sigcontext.h>
-#include <asm/user.h>
-
-extern void init_fpu(void);
-/*
- * FPU lazy state save handling...
- */
-extern void save_init_fpu( struct task_struct *tsk );
-extern void restore_fpu( struct task_struct *tsk );
-
-extern void kernel_fpu_begin(void);
-#define kernel_fpu_end() stts()
-
-
-#define unlazy_fpu( tsk ) do { \
-       if ( tsk->flags & PF_USEDFPU ) \
-               save_init_fpu( tsk ); \
-} while (0)
-
-#define clear_fpu( tsk ) do { \
-       if ( tsk->flags & PF_USEDFPU ) { \
-               asm volatile("fwait"); \
-               tsk->flags &= ~PF_USEDFPU; \
-               stts(); \
-       } \
-} while (0)
-
-/*
- * FPU state interaction...
- */
-extern unsigned short get_fpu_cwd( struct task_struct *tsk );
-extern unsigned short get_fpu_swd( struct task_struct *tsk );
-extern unsigned short get_fpu_twd( struct task_struct *tsk );
-extern unsigned short get_fpu_mxcsr( struct task_struct *tsk );
-
-extern void set_fpu_cwd( struct task_struct *tsk, unsigned short cwd );
-extern void set_fpu_swd( struct task_struct *tsk, unsigned short swd );
-extern void set_fpu_twd( struct task_struct *tsk, unsigned short twd );
-extern void set_fpu_mxcsr( struct task_struct *tsk, unsigned short mxcsr );
-
-#define load_mxcsr( val ) do { \
-       unsigned long __mxcsr = ((unsigned long)(val) & 0xffbf); \
-       asm volatile( "ldmxcsr %0" : : "m" (__mxcsr) ); \
-} while (0)
-
-/*
- * Signal frame handlers...
- */
-extern int save_i387( struct _fpstate *buf );
-extern int restore_i387( struct _fpstate *buf );
-
-/*
- * ptrace request handers...
- */
-extern int get_fpregs( struct user_i387_struct *buf,
-                      struct task_struct *tsk );
-extern int set_fpregs( struct task_struct *tsk,
-                      struct user_i387_struct *buf );
-
-extern int get_fpxregs( struct user_fxsr_struct *buf,
-                       struct task_struct *tsk );
-extern int set_fpxregs( struct task_struct *tsk,
-                       struct user_fxsr_struct *buf );
-
-/*
- * FPU state for core dumps...
- */
-extern int dump_fpu( struct pt_regs *regs,
-                    struct user_i387_struct *fpu );
-extern int dump_extended_fpu( struct pt_regs *regs,
-                             struct user_fxsr_struct *fpu );
-
-#endif /* __ASM_I386_I387_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ide.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ide.h
deleted file mode 100644 (file)
index 6ac7876..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  linux/include/asm-i386/ide.h
- *
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-/*
- *  This file contains the i386 architecture specific IDE code.
- */
-
-#ifndef __ASMi386_IDE_H
-#define __ASMi386_IDE_H
-
-#ifdef __KERNEL__
-
-#include <linux/config.h>
-
-#ifndef MAX_HWIFS
-# ifdef CONFIG_BLK_DEV_IDEPCI
-#define MAX_HWIFS      10
-# else
-#define MAX_HWIFS      6
-# endif
-#endif
-
-#define ide__sti()     __sti()
-
-static __inline__ int ide_default_irq(ide_ioreg_t base)
-{
-       switch (base) {
-               case 0x1f0: return 14;
-               case 0x170: return 15;
-               case 0x1e8: return 11;
-               case 0x168: return 10;
-               case 0x1e0: return 8;
-               case 0x160: return 12;
-               default:
-                       return 0;
-       }
-}
-
-static __inline__ ide_ioreg_t ide_default_io_base(int index)
-{
-       switch (index) {
-               case 0: return 0x1f0;
-               case 1: return 0x170;
-               case 2: return 0x1e8;
-               case 3: return 0x168;
-               case 4: return 0x1e0;
-               case 5: return 0x160;
-               default:
-                       return 0;
-       }
-}
-
-static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
-{
-       ide_ioreg_t reg = data_port;
-       int i;
-
-       for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
-               hw->io_ports[i] = reg;
-               reg += 1;
-       }
-       if (ctrl_port) {
-               hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
-       } else {
-               hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206;
-       }
-       if (irq != NULL)
-               *irq = 0;
-       hw->io_ports[IDE_IRQ_OFFSET] = 0;
-}
-
-static __inline__ void ide_init_default_hwifs(void)
-{
-#ifndef CONFIG_BLK_DEV_IDEPCI
-       hw_regs_t hw;
-       int index;
-
-       for(index = 0; index < MAX_HWIFS; index++) {
-               ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, NULL);
-               hw.irq = ide_default_irq(ide_default_io_base(index));
-               ide_register_hw(&hw, NULL);
-       }
-#endif /* CONFIG_BLK_DEV_IDEPCI */
-}
-
-typedef union {
-       unsigned all                    : 8;    /* all of the bits together */
-       struct {
-               unsigned head           : 4;    /* always zeros here */
-               unsigned unit           : 1;    /* drive select number, 0 or 1 */
-               unsigned bit5           : 1;    /* always 1 */
-               unsigned lba            : 1;    /* using LBA instead of CHS */
-               unsigned bit7           : 1;    /* always 1 */
-       } b;
-       } select_t;
-
-#define ide_request_irq(irq,hand,flg,dev,id)   request_irq((irq),(hand),(flg),(dev),(id))
-#define ide_free_irq(irq,dev_id)               free_irq((irq), (dev_id))
-#define ide_check_region(from,extent)          check_region((from), (extent))
-#define ide_request_region(from,extent,name)   request_region((from), (extent), (name))
-#define ide_release_region(from,extent)                release_region((from), (extent))
-
-/*
- * The following are not needed for the non-m68k ports
- */
-#define ide_ack_intr(hwif)             (1)
-#define ide_fix_driveid(id)            do {} while (0)
-#define ide_release_lock(lock)         do {} while (0)
-#define ide_get_lock(lock, hdlr, data) do {} while (0)
-
-#endif /* __KERNEL__ */
-
-#endif /* __ASMi386_IDE_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/init.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/init.h
deleted file mode 100644 (file)
index 17d2155..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#error "<asm/init.h> should never be used - use <linux/init.h> instead"
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/io.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/io.h
deleted file mode 100644 (file)
index 1afc7e4..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-#ifndef _ASM_IO_H
-#define _ASM_IO_H
-
-#include <linux/config.h>
-#include <asm/hypervisor.h>
-/*
- * This file contains the definitions for the x86 IO instructions
- * inb/inw/inl/outb/outw/outl and the "string versions" of the same
- * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing"
- * versions of the single-IO instructions (inb_p/inw_p/..).
- *
- * This file is not meant to be obfuscating: it's just complicated
- * to (a) handle it all in a way that makes gcc able to optimize it
- * as well as possible and (b) trying to avoid writing the same thing
- * over and over again with slight variations and possibly making a
- * mistake somewhere.
- */
-
-/*
- * Thanks to James van Artsdalen for a better timing-fix than
- * the two short jumps: using outb's to a nonexistent port seems
- * to guarantee better timings even on fast machines.
- *
- * On the other hand, I'd like to be sure of a non-existent port:
- * I feel a bit unsafe about using 0x80 (should be safe, though)
- *
- *             Linus
- */
-
- /*
-  *  Bit simplified and optimized by Jan Hubicka
-  *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999.
-  *
-  *  isa_memset_io, isa_memcpy_fromio, isa_memcpy_toio added,
-  *  isa_read[wl] and isa_write[wl] fixed
-  *  - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
-  */
-
-#define IO_SPACE_LIMIT 0xffff
-
-#define XQUAD_PORTIO_BASE 0xfe400000
-#define XQUAD_PORTIO_LEN  0x40000   /* 256k per quad. Only remapping 1st */
-
-#ifdef __KERNEL__
-
-#include <linux/vmalloc.h>
-
-/*
- * Temporary debugging check to catch old code using
- * unmapped ISA addresses. Will be removed in 2.4.
- */
-#if CONFIG_DEBUG_IOVIRT
-  extern void *__io_virt_debug(unsigned long x, const char *file, int line);
-  extern unsigned long __io_phys_debug(unsigned long x, const char *file, int line);
-  #define __io_virt(x) __io_virt_debug((unsigned long)(x), __FILE__, __LINE__)
-//#define __io_phys(x) __io_phys_debug((unsigned long)(x), __FILE__, __LINE__)
-#else
-  #define __io_virt(x) ((void *)(x))
-//#define __io_phys(x) __pa(x)
-#endif
-
-/*
- * Change virtual addresses to physical addresses and vv.
- * These are pretty trivial
- */
-static inline unsigned long virt_to_phys(volatile void * address)
-{
-       return __pa(address);
-}
-
-static inline void * phys_to_virt(unsigned long address)
-{
-       return __va(address);
-}
-
-/*
- * Change virtual addresses to machine addresses and vv.
- * These are equally trivial.
- */
-
-/*
- * Change "struct page" to physical address.
- */
-#define page_to_phys(page)     ((page - mem_map) << PAGE_SHIFT)
-
-/*
- * IO bus memory addresses are also 1:1 with the physical address
- */
-#define virt_to_bus virt_to_phys
-#define bus_to_virt phys_to_virt
-#define page_to_bus page_to_phys
-
-/*
- * readX/writeX() are used to access memory mapped devices. On some
- * architectures the memory mapped IO stuff needs to be accessed
- * differently. On the x86 architecture, we just read/write the
- * memory location directly.
- */
-
-#define readb(addr) (*(volatile unsigned char *) __io_virt(addr))
-#define readw(addr) (*(volatile unsigned short *) __io_virt(addr))
-#define readl(addr) (*(volatile unsigned int *) __io_virt(addr))
-#define __raw_readb readb
-#define __raw_readw readw
-#define __raw_readl readl
-
-#define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b))
-#define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b))
-#define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b))
-#define __raw_writeb writeb
-#define __raw_writew writew
-#define __raw_writel writel
-
-#define memset_io(a,b,c)       memset(__io_virt(a),(b),(c))
-#define memcpy_fromio(a,b,c)   memcpy((a),__io_virt(b),(c))
-#define memcpy_toio(a,b,c)     memcpy(__io_virt(a),(b),(c))
-
-/*
- * ISA space is 'always mapped' on a typical x86 system, no need to
- * explicitly ioremap() it. The fact that the ISA IO space is mapped
- * to PAGE_OFFSET is pure coincidence - it does not mean ISA values
- * are physical addresses. The following constant pointer can be
- * used as the IO-area pointer (it can be iounmapped as well, so the
- * analogy with PCI is quite large):
- */
-#define __ISA_IO_base ((char *)(PAGE_OFFSET))
-
-#define isa_readb(a) readb(__ISA_IO_base + (a))
-#define isa_readw(a) readw(__ISA_IO_base + (a))
-#define isa_readl(a) readl(__ISA_IO_base + (a))
-#define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a))
-#define isa_writew(w,a) writew(w,__ISA_IO_base + (a))
-#define isa_writel(l,a) writel(l,__ISA_IO_base + (a))
-#define isa_memset_io(a,b,c)           memset_io(__ISA_IO_base + (a),(b),(c))
-#define isa_memcpy_fromio(a,b,c)       memcpy_fromio((a),__ISA_IO_base + (b),(c))
-#define isa_memcpy_toio(a,b,c)         memcpy_toio(__ISA_IO_base + (a),(b),(c))
-
-
-/*
- * Again, i386 does not require mem IO specific function.
- */
-
-#define eth_io_copy_and_sum(a,b,c,d)           eth_copy_and_sum((a),__io_virt(b),(c),(d))
-#define isa_eth_io_copy_and_sum(a,b,c,d)       eth_copy_and_sum((a),__io_virt(__ISA_IO_base + (b)),(c),(d))
-
-static inline int check_signature(unsigned long io_addr,
-       const unsigned char *signature, int length)
-{
-       int retval = 0;
-       do {
-               if (readb(io_addr) != *signature)
-                       goto out;
-               io_addr++;
-               signature++;
-               length--;
-       } while (length);
-       retval = 1;
-out:
-       return retval;
-}
-
-static inline int isa_check_signature(unsigned long io_addr,
-       const unsigned char *signature, int length)
-{
-       int retval = 0;
-       do {
-               if (isa_readb(io_addr) != *signature)
-                       goto out;
-               io_addr++;
-               signature++;
-               length--;
-       } while (length);
-       retval = 1;
-out:
-       return retval;
-}
-
-/*
- *     Cache management
- *
- *     This needed for two cases
- *     1. Out of order aware processors
- *     2. Accidentally out of order processors (PPro errata #51)
- */
-#if defined(CONFIG_X86_OOSTORE) || defined(CONFIG_X86_PPRO_FENCE)
-
-static inline void flush_write_buffers(void)
-{
-       __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory");
-}
-
-#define dma_cache_inv(_start,_size)            flush_write_buffers()
-#define dma_cache_wback(_start,_size)          flush_write_buffers()
-#define dma_cache_wback_inv(_start,_size)      flush_write_buffers()
-
-#else
-
-/* Nothing to do */
-
-#define dma_cache_inv(_start,_size)            do { } while (0)
-#define dma_cache_wback(_start,_size)          do { } while (0)
-#define dma_cache_wback_inv(_start,_size)      do { } while (0)
-#define flush_write_buffers()
-
-#endif
-
-#endif /* __KERNEL__ */
-
-#ifdef SLOW_IO_BY_JUMPING
-#define __SLOW_DOWN_IO "\njmp 1f\n1:\tjmp 1f\n1:"
-#else
-#define __SLOW_DOWN_IO "\noutb %%al,$0x80"
-#endif
-
-#ifdef REALLY_SLOW_IO
-#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO
-#else
-#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO
-#endif
-
-#ifdef CONFIG_MULTIQUAD
-extern void *xquad_portio;    /* Where the IO area was mapped */
-#endif /* CONFIG_MULTIQUAD */
-
-/*
- * Talk about misusing macros..
- */
-#define __OUT1(s,x) \
-static inline void out##s(unsigned x value, unsigned short port) {
-
-#define __OUT2(s,s1,s2) \
-__asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1"
-
-#ifdef CONFIG_MULTIQUAD
-/* Make the default portio routines operate on quad 0 for now */
-#define __OUT(s,s1,x) \
-__OUT1(s##_local,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \
-__OUT1(s##_p_local,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));} \
-__OUTQ0(s,s,x) \
-__OUTQ0(s,s##_p,x) 
-#else
-#define __OUT(s,s1,x) \
-__OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \
-__OUT1(s##_p,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));} 
-#endif /* CONFIG_MULTIQUAD */
-
-#ifdef CONFIG_MULTIQUAD
-#define __OUTQ0(s,ss,x)    /* Do the equivalent of the portio op on quad 0 */ \
-static inline void out##ss(unsigned x value, unsigned short port) { \
-       if (xquad_portio) \
-               write##s(value, (unsigned long) xquad_portio + port); \
-       else               /* We're still in early boot, running on quad 0 */ \
-               out##ss##_local(value, port); \
-} 
-
-#define __INQ0(s,ss)       /* Do the equivalent of the portio op on quad 0 */ \
-static inline RETURN_TYPE in##ss(unsigned short port) { \
-       if (xquad_portio) \
-               return read##s((unsigned long) xquad_portio + port); \
-       else               /* We're still in early boot, running on quad 0 */ \
-               return in##ss##_local(port); \
-}
-#endif /* CONFIG_MULTIQUAD */
-
-#define __IN1(s) \
-static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v;
-
-#define __IN2(s,s1,s2) \
-__asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0"
-
-#ifdef CONFIG_MULTIQUAD
-#define __IN(s,s1,i...) \
-__IN1(s##_local) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__IN1(s##_p_local) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__INQ0(s,s) \
-__INQ0(s,s##_p) 
-#else
-#define __IN(s,s1,i...) \
-__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__IN1(s##_p) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; } 
-#endif /* CONFIG_MULTIQUAD */
-
-#define __INS(s) \
-static inline void ins##s(unsigned short port, void * addr, unsigned long count) \
-{ __asm__ __volatile__ ("rep ; ins" #s \
-: "=D" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
-
-#define __OUTS(s) \
-static inline void outs##s(unsigned short port, const void * addr, unsigned long count) \
-{ __asm__ __volatile__ ("rep ; outs" #s \
-: "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
-
-#define RETURN_TYPE unsigned char
-__IN(b,"")
-#undef RETURN_TYPE
-#define RETURN_TYPE unsigned short
-__IN(w,"")
-#undef RETURN_TYPE
-#define RETURN_TYPE unsigned int
-__IN(l,"")
-#undef RETURN_TYPE
-
-__OUT(b,"b",char)
-__OUT(w,"w",short)
-__OUT(l,,int)
-
-__INS(b)
-__INS(w)
-__INS(l)
-
-__OUTS(b)
-__OUTS(w)
-__OUTS(l)
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/io_apic.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/io_apic.h
deleted file mode 100644 (file)
index b132819..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#ifndef __ASM_IO_APIC_H
-#define __ASM_IO_APIC_H
-
-#include <linux/config.h>
-#include <asm/types.h>
-
-/*
- * Intel IO-APIC support for SMP and UP systems.
- *
- * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar
- */
-
-#ifdef CONFIG_X86_IO_APIC
-
-#define APIC_MISMATCH_DEBUG
-
-#define IO_APIC_BASE(idx) \
-               ((volatile int *)__fix_to_virt(FIX_IO_APIC_BASE_0 + idx))
-
-/*
- * The structure of the IO-APIC:
- */
-struct IO_APIC_reg_00 {
-       __u32   __reserved_2    : 24,
-               ID              :  4,
-               __reserved_1    :  4;
-} __attribute__ ((packed));
-
-struct IO_APIC_reg_01 {
-       __u32   version         :  8,
-               __reserved_2    :  7,
-               PRQ             :  1,
-               entries         :  8,
-               __reserved_1    :  8;
-} __attribute__ ((packed));
-
-struct IO_APIC_reg_02 {
-       __u32   __reserved_2    : 24,
-               arbitration     :  4,
-               __reserved_1    :  4;
-} __attribute__ ((packed));
-
-/*
- * # of IO-APICs and # of IRQ routing registers
- */
-extern int nr_ioapics;
-extern int nr_ioapic_registers[MAX_IO_APICS];
-
-enum ioapic_irq_destination_types {
-       dest_Fixed = 0,
-       dest_LowestPrio = 1,
-       dest_SMI = 2,
-       dest__reserved_1 = 3,
-       dest_NMI = 4,
-       dest_INIT = 5,
-       dest__reserved_2 = 6,
-       dest_ExtINT = 7
-};
-
-struct IO_APIC_route_entry {
-       __u32   vector          :  8,
-               delivery_mode   :  3,   /* 000: FIXED
-                                        * 001: lowest prio
-                                        * 111: ExtINT
-                                        */
-               dest_mode       :  1,   /* 0: physical, 1: logical */
-               delivery_status :  1,
-               polarity        :  1,
-               irr             :  1,
-               trigger         :  1,   /* 0: edge, 1: level */
-               mask            :  1,   /* 0: enabled, 1: disabled */
-               __reserved_2    : 15;
-
-       union {         struct { __u32
-                                       __reserved_1    : 24,
-                                       physical_dest   :  4,
-                                       __reserved_2    :  4;
-                       } physical;
-
-                       struct { __u32
-                                       __reserved_1    : 24,
-                                       logical_dest    :  8;
-                       } logical;
-       } dest;
-
-} __attribute__ ((packed));
-
-/*
- * MP-BIOS irq configuration table structures:
- */
-
-/* I/O APIC entries */
-extern struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS];
-
-/* # of MP IRQ source entries */
-extern int mp_irq_entries;
-
-/* MP IRQ source entries */
-extern struct mpc_config_intsrc mp_irqs[MAX_IRQ_SOURCES];
-
-/* non-0 if default (table-less) MP configuration */
-extern int mpc_default_type;
-
-static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg)
-{
-       *IO_APIC_BASE(apic) = reg;
-       return *(IO_APIC_BASE(apic)+4);
-}
-
-static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value)
-{
-       *IO_APIC_BASE(apic) = reg;
-       *(IO_APIC_BASE(apic)+4) = value;
-}
-
-/*
- * Re-write a value: to be used for read-modify-write
- * cycles where the read already set up the index register.
- */
-static inline void io_apic_modify(unsigned int apic, unsigned int value)
-{
-       *(IO_APIC_BASE(apic)+4) = value;
-}
-
-/*
- * Synchronize the IO-APIC and the CPU by doing
- * a dummy read from the IO-APIC
- */
-static inline void io_apic_sync(unsigned int apic)
-{
-       (void) *(IO_APIC_BASE(apic)+4);
-}
-
-/* 1 if "noapic" boot option passed */
-extern int skip_ioapic_setup;
-
-/*
- * If we use the IO-APIC for IRQ routing, disable automatic
- * assignment of PCI IRQ's.
- */
-#define io_apic_assign_pci_irqs (mp_irq_entries && !skip_ioapic_setup)
-
-#else  /* !CONFIG_X86_IO_APIC */
-#define io_apic_assign_pci_irqs 0
-#endif
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctl.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctl.h
deleted file mode 100644 (file)
index c75f20a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* $Id: ioctl.h,v 1.5 1993/07/19 21:53:50 root Exp root $
- *
- * linux/ioctl.h for Linux by H.H. Bergman.
- */
-
-#ifndef _ASMI386_IOCTL_H
-#define _ASMI386_IOCTL_H
-
-/* ioctl command encoding: 32 bits total, command in lower 16 bits,
- * size of the parameter structure in the lower 14 bits of the
- * upper 16 bits.
- * Encoding the size of the parameter structure in the ioctl request
- * is useful for catching programs compiled with old versions
- * and to avoid overwriting user space outside the user buffer area.
- * The highest 2 bits are reserved for indicating the ``access mode''.
- * NOTE: This limits the max parameter size to 16kB -1 !
- */
-
-/*
- * The following is for compatibility across the various Linux
- * platforms.  The i386 ioctl numbering scheme doesn't really enforce
- * a type field.  De facto, however, the top 8 bits of the lower 16
- * bits are indeed used as a type field, so we might just as well make
- * this explicit here.  Please be sure to use the decoding macros
- * below from now on.
- */
-#define _IOC_NRBITS    8
-#define _IOC_TYPEBITS  8
-#define _IOC_SIZEBITS  14
-#define _IOC_DIRBITS   2
-
-#define _IOC_NRMASK    ((1 << _IOC_NRBITS)-1)
-#define _IOC_TYPEMASK  ((1 << _IOC_TYPEBITS)-1)
-#define _IOC_SIZEMASK  ((1 << _IOC_SIZEBITS)-1)
-#define _IOC_DIRMASK   ((1 << _IOC_DIRBITS)-1)
-
-#define _IOC_NRSHIFT   0
-#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
-#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
-#define _IOC_DIRSHIFT  (_IOC_SIZESHIFT+_IOC_SIZEBITS)
-
-/*
- * Direction bits.
- */
-#define _IOC_NONE      0U
-#define _IOC_WRITE     1U
-#define _IOC_READ      2U
-
-#define _IOC(dir,type,nr,size) \
-       (((dir)  << _IOC_DIRSHIFT) | \
-        ((type) << _IOC_TYPESHIFT) | \
-        ((nr)   << _IOC_NRSHIFT) | \
-        ((size) << _IOC_SIZESHIFT))
-
-/* used to create numbers */
-#define _IO(type,nr)           _IOC(_IOC_NONE,(type),(nr),0)
-#define _IOR(type,nr,size)     _IOC(_IOC_READ,(type),(nr),sizeof(size))
-#define _IOW(type,nr,size)     _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
-#define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
-
-/* used to decode ioctl numbers.. */
-#define _IOC_DIR(nr)           (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
-#define _IOC_TYPE(nr)          (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
-#define _IOC_NR(nr)            (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
-#define _IOC_SIZE(nr)          (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
-
-/* ...and for the drivers/sound files... */
-
-#define IOC_IN         (_IOC_WRITE << _IOC_DIRSHIFT)
-#define IOC_OUT                (_IOC_READ << _IOC_DIRSHIFT)
-#define IOC_INOUT      ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
-#define IOCSIZE_MASK   (_IOC_SIZEMASK << _IOC_SIZESHIFT)
-#define IOCSIZE_SHIFT  (_IOC_SIZESHIFT)
-
-#endif /* _ASMI386_IOCTL_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctls.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ioctls.h
deleted file mode 100644 (file)
index 9fc340a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef __ARCH_I386_IOCTLS_H__
-#define __ARCH_I386_IOCTLS_H__
-
-#include <asm/ioctl.h>
-
-/* 0x54 is just a magic number to make these relatively unique ('T') */
-
-#define TCGETS         0x5401
-#define TCSETS         0x5402
-#define TCSETSW                0x5403
-#define TCSETSF                0x5404
-#define TCGETA         0x5405
-#define TCSETA         0x5406
-#define TCSETAW                0x5407
-#define TCSETAF                0x5408
-#define TCSBRK         0x5409
-#define TCXONC         0x540A
-#define TCFLSH         0x540B
-#define TIOCEXCL       0x540C
-#define TIOCNXCL       0x540D
-#define TIOCSCTTY      0x540E
-#define TIOCGPGRP      0x540F
-#define TIOCSPGRP      0x5410
-#define TIOCOUTQ       0x5411
-#define TIOCSTI                0x5412
-#define TIOCGWINSZ     0x5413
-#define TIOCSWINSZ     0x5414
-#define TIOCMGET       0x5415
-#define TIOCMBIS       0x5416
-#define TIOCMBIC       0x5417
-#define TIOCMSET       0x5418
-#define TIOCGSOFTCAR   0x5419
-#define TIOCSSOFTCAR   0x541A
-#define FIONREAD       0x541B
-#define TIOCINQ                FIONREAD
-#define TIOCLINUX      0x541C
-#define TIOCCONS       0x541D
-#define TIOCGSERIAL    0x541E
-#define TIOCSSERIAL    0x541F
-#define TIOCPKT                0x5420
-#define FIONBIO                0x5421
-#define TIOCNOTTY      0x5422
-#define TIOCSETD       0x5423
-#define TIOCGETD       0x5424
-#define TCSBRKP                0x5425  /* Needed for POSIX tcsendbreak() */
-#define TIOCTTYGSTRUCT 0x5426  /* For debugging only */
-#define TIOCSBRK       0x5427  /* BSD compatibility */
-#define TIOCCBRK       0x5428  /* BSD compatibility */
-#define TIOCGSID       0x5429  /* Return the session ID of FD */
-#define TIOCGPTN       _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TIOCSPTLCK     _IOW('T',0x31, int)  /* Lock/unlock Pty */
-
-#define FIONCLEX       0x5450  /* these numbers need to be adjusted. */
-#define FIOCLEX                0x5451
-#define FIOASYNC       0x5452
-#define TIOCSERCONFIG  0x5453
-#define TIOCSERGWILD   0x5454
-#define TIOCSERSWILD   0x5455
-#define TIOCGLCKTRMIOS 0x5456
-#define TIOCSLCKTRMIOS 0x5457
-#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
-#define TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TIOCMIWAIT     0x545C  /* wait for a change on serial input line(s) */
-#define TIOCGICOUNT    0x545D  /* read serial port inline interrupt counts */
-#define TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TIOCPKT_DATA            0
-#define TIOCPKT_FLUSHREAD       1
-#define TIOCPKT_FLUSHWRITE      2
-#define TIOCPKT_STOP            4
-#define TIOCPKT_START           8
-#define TIOCPKT_NOSTOP         16
-#define TIOCPKT_DOSTOP         32
-
-#define TIOCSER_TEMT    0x01   /* Transmitter physically empty */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ipc.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ipc.h
deleted file mode 100644 (file)
index 36f4306..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef __i386_IPC_H__
-#define __i386_IPC_H__
-
-/* 
- * These are used to wrap system calls on x86.
- *
- * See arch/i386/kernel/sys_i386.c for ugly details..
- */
-struct ipc_kludge {
-       struct msgbuf *msgp;
-       long msgtyp;
-};
-
-#define SEMOP           1
-#define SEMGET          2
-#define SEMCTL          3
-#define MSGSND         11
-#define MSGRCV         12
-#define MSGGET         13
-#define MSGCTL         14
-#define SHMAT          21
-#define SHMDT          22
-#define SHMGET         23
-#define SHMCTL         24
-
-/* Used by the DIPC package, try and avoid reusing it */
-#define DIPC            25
-
-#define IPCCALL(version,op)    ((version)<<16 | (op))
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ipcbuf.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ipcbuf.h
deleted file mode 100644 (file)
index 0dcad4f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef __i386_IPCBUF_H__
-#define __i386_IPCBUF_H__
-
-/*
- * The ipc64_perm structure for i386 architecture.
- * Note extra padding because this structure is passed back and forth
- * between kernel and user space.
- *
- * Pad space is left for:
- * - 32-bit mode_t and seq
- * - 2 miscellaneous 32-bit values
- */
-
-struct ipc64_perm
-{
-       __kernel_key_t          key;
-       __kernel_uid32_t        uid;
-       __kernel_gid32_t        gid;
-       __kernel_uid32_t        cuid;
-       __kernel_gid32_t        cgid;
-       __kernel_mode_t         mode;
-       unsigned short          __pad1;
-       unsigned short          seq;
-       unsigned short          __pad2;
-       unsigned long           __unused1;
-       unsigned long           __unused2;
-};
-
-#endif /* __i386_IPCBUF_H__ */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/irq.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/irq.h
deleted file mode 100644 (file)
index 619353e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _ASM_IRQ_H
-#define _ASM_IRQ_H
-
-/*
- *     linux/include/asm/irq.h
- *
- *     (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
- *
- *     IRQ/IPI changes taken from work by Thomas Radke
- *     <tomsoft@informatik.tu-chemnitz.de>
- */
-
-#include <linux/config.h>
-#include <asm/hypervisor.h>
-#include <asm/ptrace.h>
-
-#define NET_TX_IRQ  _EVENT_NET_TX
-#define NET_RX_IRQ  _EVENT_NET_RX
-#define NET2_TX_IRQ  _EVENT_NET2_TX
-#define NET2_RX_IRQ  _EVENT_NET2_RX
-#define TIMER_IRQ   _EVENT_TIMER
-
-#define NR_IRQS (sizeof(HYPERVISOR_shared_info->events) * 8)
-
-#define irq_cannonicalize(_irq) (_irq)
-
-extern void disable_irq(unsigned int);
-extern void disable_irq_nosync(unsigned int);
-extern void enable_irq(unsigned int);
-extern unsigned int do_IRQ(int, struct pt_regs *);
-
-#endif /* _ASM_IRQ_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/kdb.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/kdb.h
deleted file mode 100644 (file)
index 315bde8..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Minimalist Kernel Debugger
- *
- * Copyright (C) 1999 Silicon Graphics, Inc.
- * Copyright (C) Scott Lurndal (slurn@engr.sgi.com)
- * Copyright (C) Scott Foehner (sfoehner@engr.sgi.com)
- * Copyright (C) Srinivasa Thirumalachar (sprasad@engr.sgi.com)
- *
- * See the file LIA-COPYRIGHT for additional information.
- *
- * Written March 1999 by Scott Lurndal at Silicon Graphics, Inc.
- *
- * Modifications from:
- *      Richard Bass                    1999/07/20
- *              Many bug fixes and enhancements.
- *      Scott Foehner
- *              Port to ia64
- *     Scott Lurndal                   1999/12/12
- *             v1.0 restructuring.
- */
-#if !defined(_ASM_KDB_H)
-#define _ASM_KDB_H
-
-       /*
-        * KDB_ENTER() is a macro which causes entry into the kernel
-        * debugger from any point in the kernel code stream.  If it 
-        * is intended to be used from interrupt level, it must  use
-        * a non-maskable entry method.
-        */
-#define KDB_ENTER()    asm("\tint $129\n")
-
-       /*
-        * Define the exception frame for this architeture
-        */
-struct pt_regs;
-typedef struct pt_regs *kdb_eframe_t;
-
-       /*
-        * Needed for exported symbols.
-        */
-typedef unsigned long kdb_machreg_t;
-
-#define kdb_machreg_fmt                "0x%lx"
-#define kdb_machreg_fmt0       "0x%08lx"
-#define kdb_bfd_vma_fmt                "0x%lx"
-#define kdb_bfd_vma_fmt0       "0x%08lx"
-#define kdb_elfw_addr_fmt      "0x%x"
-#define kdb_elfw_addr_fmt0     "0x%08x"
-
-       /*
-        * Per cpu arch specific kdb state.  Must be in range 0xff000000.
-        */
-#define KDB_STATE_A_IF         0x01000000      /* Saved IF flag */
-
-        /*
-         * Interface from kernel trap handling code to kernel debugger.
-         */
-extern int     kdba_callback_die(struct pt_regs *, int, long, void*);
-extern int     kdba_callback_bp(struct pt_regs *, int, long, void*);
-extern int     kdba_callback_debug(struct pt_regs *, int, long, void *);
-
-#endif /* ASM_KDB_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/kdbprivate.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/kdbprivate.h
deleted file mode 100644 (file)
index 7bbd86b..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Minimalist Kernel Debugger
- *
- * Copyright (C) 1999 Silicon Graphics, Inc.
- * Copyright (C) Scott Lurndal (slurn@engr.sgi.com)
- * Copyright (C) Scott Foehner (sfoehner@engr.sgi.com)
- * Copyright (C) Srinivasa Thirumalachar (sprasad@engr.sgi.com)
- *
- * See the file LIA-COPYRIGHT for additional information.
- *
- * Written March 1999 by Scott Lurndal at Silicon Graphics, Inc.
- *
- * Modifications from:
- *      Richard Bass                    1999/07/20
- *              Many bug fixes and enhancements.
- *      Scott Foehner
- *              Port to ia64
- *     Scott Lurndal                   1999/12/12
- *             v1.0 restructuring.
- *     Keith Owens                     2000/05/23
- *             KDB v1.2
- */
-#if !defined(_ASM_KDBPRIVATE_H)
-#define _ASM_KDBPRIVATE_H
-
-typedef unsigned char kdb_machinst_t;
-
-       /*
-        * KDB_MAXBPT describes the total number of breakpoints
-        * supported by this architecure.  
-        */
-#define KDB_MAXBPT     16
-       /*
-        * KDB_MAXHARDBPT describes the total number of hardware
-        * breakpoint registers that exist.
-        */
-#define KDB_MAXHARDBPT  4
-        /*
-         * Provide space for KDB_MAX_COMMANDS commands.
-         */
-#define KDB_MAX_COMMANDS        125
-
-       /*
-        * Platform specific environment entries
-        */
-#define KDB_PLATFORM_ENV       "IDMODE=x86", "BYTESPERWORD=4", "IDCOUNT=16"
-
-       /*
-        * Define the direction that the stack grows
-        */
-#define KDB_STACK_DIRECTION    (-1)    /* Stack grows down */
-
-       /*
-        * Support for ia32 debug registers 
-        */
-typedef struct _kdbhard_bp {
-       kdb_machreg_t   bph_reg;        /* Register this breakpoint uses */
-
-       unsigned int    bph_free:1;     /* Register available for use */
-       unsigned int    bph_data:1;     /* Data Access breakpoint */
-
-       unsigned int    bph_write:1;    /* Write Data breakpoint */
-       unsigned int    bph_mode:2;     /* 0=inst, 1=write, 2=io, 3=read */
-       unsigned int    bph_length:2;   /* 0=1, 1=2, 2=BAD, 3=4 (bytes) */
-} kdbhard_bp_t;
-
-extern kdbhard_bp_t    kdb_hardbreaks[/* KDB_MAXHARDBPT */];
-
-#define IA32_BREAKPOINT_INSTRUCTION    0xcc
-
-#define DR6_BT  0x00008000
-#define DR6_BS  0x00004000
-#define DR6_BD  0x00002000
-
-#define DR6_B3  0x00000008
-#define DR6_B2  0x00000004
-#define DR6_B1  0x00000002
-#define DR6_B0  0x00000001
-
-#define DR7_RW_VAL(dr, drnum) \
-       (((dr) >> (16 + (4 * (drnum)))) & 0x3)
-
-#define DR7_RW_SET(dr, drnum, rw)                              \
-       do {                                                    \
-               (dr) &= ~(0x3 << (16 + (4 * (drnum))));         \
-               (dr) |= (((rw) & 0x3) << (16 + (4 * (drnum)))); \
-       } while (0)
-
-#define DR7_RW0(dr)       DR7_RW_VAL(dr, 0)
-#define DR7_RW0SET(dr,rw)  DR7_RW_SET(dr, 0, rw)
-#define DR7_RW1(dr)       DR7_RW_VAL(dr, 1)
-#define DR7_RW1SET(dr,rw)  DR7_RW_SET(dr, 1, rw)
-#define DR7_RW2(dr)       DR7_RW_VAL(dr, 2)
-#define DR7_RW2SET(dr,rw)  DR7_RW_SET(dr, 2, rw)
-#define DR7_RW3(dr)       DR7_RW_VAL(dr, 3)
-#define DR7_RW3SET(dr,rw)  DR7_RW_SET(dr, 3, rw)
-
-
-#define DR7_LEN_VAL(dr, drnum) \
-       (((dr) >> (18 + (4 * (drnum)))) & 0x3)
-
-#define DR7_LEN_SET(dr, drnum, rw)                             \
-       do {                                                    \
-               (dr) &= ~(0x3 << (18 + (4 * (drnum))));         \
-               (dr) |= (((rw) & 0x3) << (18 + (4 * (drnum)))); \
-       } while (0)
-#define DR7_LEN0(dr)        DR7_LEN_VAL(dr, 0)
-#define DR7_LEN0SET(dr,len)  DR7_LEN_SET(dr, 0, len)
-#define DR7_LEN1(dr)        DR7_LEN_VAL(dr, 1)
-#define DR7_LEN1SET(dr,len)  DR7_LEN_SET(dr, 1, len)
-#define DR7_LEN2(dr)        DR7_LEN_VAL(dr, 2)
-#define DR7_LEN2SET(dr,len)  DR7_LEN_SET(dr, 2, len)
-#define DR7_LEN3(dr)        DR7_LEN_VAL(dr, 3)
-#define DR7_LEN3SET(dr,len)  DR7_LEN_SET(dr, 3, len)
-
-#define DR7_G0(dr)    (((dr)>>1)&0x1)
-#define DR7_G0SET(dr) ((dr) |= 0x2)
-#define DR7_G0CLR(dr) ((dr) &= ~0x2)
-#define DR7_G1(dr)    (((dr)>>3)&0x1)
-#define DR7_G1SET(dr) ((dr) |= 0x8)
-#define DR7_G1CLR(dr) ((dr) &= ~0x8)
-#define DR7_G2(dr)    (((dr)>>5)&0x1)
-#define DR7_G2SET(dr) ((dr) |= 0x20)
-#define DR7_G2CLR(dr) ((dr) &= ~0x20)
-#define DR7_G3(dr)    (((dr)>>7)&0x1)
-#define DR7_G3SET(dr) ((dr) |= 0x80)
-#define DR7_G3CLR(dr) ((dr) &= ~0x80)
-
-#define DR7_L0(dr)    (((dr))&0x1)
-#define DR7_L0SET(dr) ((dr) |= 0x1)
-#define DR7_L0CLR(dr) ((dr) &= ~0x1)
-#define DR7_L1(dr)    (((dr)>>2)&0x1)
-#define DR7_L1SET(dr) ((dr) |= 0x4)
-#define DR7_L1CLR(dr) ((dr) &= ~0x4)
-#define DR7_L2(dr)    (((dr)>>4)&0x1)
-#define DR7_L2SET(dr) ((dr) |= 0x10)
-#define DR7_L2CLR(dr) ((dr) &= ~0x10)
-#define DR7_L3(dr)    (((dr)>>6)&0x1)
-#define DR7_L3SET(dr) ((dr) |= 0x40)
-#define DR7_L3CLR(dr) ((dr) &= ~0x40)
-
-#define DR7_GD          0x00002000              /* General Detect Enable */
-#define DR7_GE          0x00000200              /* Global exact */
-#define DR7_LE          0x00000100              /* Local exact */
-
-extern kdb_machreg_t kdba_getdr6(void);
-extern void kdba_putdr6(kdb_machreg_t);
-
-extern kdb_machreg_t kdba_getdr7(void);
-
-extern kdb_machreg_t kdba_getdr(int);
-extern void kdba_putdr(int, kdb_machreg_t);
-
-extern kdb_machreg_t kdb_getcr(int);
-
-#define KDB_HAVE_LONGJMP
-#ifdef KDB_HAVE_LONGJMP
-/*
- * Support for setjmp/longjmp
- */
-#define JB_BX   0
-#define JB_SI   1
-#define JB_DI   2
-#define JB_BP   3
-#define JB_SP   4
-#define JB_PC   5
-
-typedef struct __kdb_jmp_buf {
-        unsigned long   regs[6];       /* kdba_setjmp assumes fixed offsets here */
-} kdb_jmp_buf;
-
-extern int kdba_setjmp(kdb_jmp_buf *);
-extern void kdba_longjmp(kdb_jmp_buf *, int);
-
-extern kdb_jmp_buf  kdbjmpbuf[];
-#endif /* KDB_HAVE_LONGJMP */
-
-#endif /* !_ASM_KDBPRIVATE_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/keyboard.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/keyboard.h
deleted file mode 100644 (file)
index 3b41967..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *  linux/include/asm-i386/keyboard.h
- *
- *  Created 3 Nov 1996 by Geert Uytterhoeven
- */
-
-/*
- *  This file contains the i386 architecture specific keyboard definitions
- */
-
-#ifndef _I386_KEYBOARD_H
-#define _I386_KEYBOARD_H
-
-#ifdef __KERNEL__
-
-#include <linux/kernel.h>
-#include <linux/ioport.h>
-#include <linux/kd.h>
-#include <linux/pm.h>
-#include <asm/io.h>
-
-#define KEYBOARD_IRQ                   1
-#define DISABLE_KBD_DURING_INTERRUPTS  0
-
-extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode);
-extern int pckbd_getkeycode(unsigned int scancode);
-extern int pckbd_translate(unsigned char scancode, unsigned char *keycode,
-                          char raw_mode);
-extern char pckbd_unexpected_up(unsigned char keycode);
-extern void pckbd_leds(unsigned char leds);
-extern void pckbd_init_hw(void);
-extern int pckbd_pm_resume(struct pm_dev *, pm_request_t, void *);
-extern pm_callback pm_kbd_request_override;
-extern unsigned char pckbd_sysrq_xlate[128];
-
-#define kbd_setkeycode         pckbd_setkeycode
-#define kbd_getkeycode         pckbd_getkeycode
-#define kbd_translate          pckbd_translate
-#define kbd_unexpected_up      pckbd_unexpected_up
-#define kbd_leds               pckbd_leds
-#define kbd_init_hw            pckbd_init_hw
-#define kbd_sysrq_xlate                pckbd_sysrq_xlate
-
-#define SYSRQ_KEY 0x54
-#define E1_PAUSE   119         /* PAUSE key */
-
-/* resource allocation */
-#define kbd_request_region()
-#define kbd_request_irq(handler) request_irq(KEYBOARD_IRQ, handler, 0, \
-                                             "keyboard", NULL)
-
-/* How to access the keyboard macros on this platform.  */
-#define kbd_read_input() inb(KBD_DATA_REG)
-#define kbd_read_status() inb(KBD_STATUS_REG)
-#define kbd_write_output(val) outb(val, KBD_DATA_REG)
-#define kbd_write_command(val) outb(val, KBD_CNTL_REG)
-
-/* Some stoneage hardware needs delays after some operations.  */
-#define kbd_pause() do { } while(0)
-
-/*
- * Machine specific bits for the PS/2 driver
- */
-
-#define AUX_IRQ 12
-
-#define aux_request_irq(hand, dev_id)                                  \
-       request_irq(AUX_IRQ, hand, SA_SHIRQ, "PS/2 Mouse", dev_id)
-
-#define aux_free_irq(dev_id) free_irq(AUX_IRQ, dev_id)
-
-#endif /* __KERNEL__ */
-#endif /* _I386_KEYBOARD_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/kmap_types.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/kmap_types.h
deleted file mode 100644 (file)
index 5107c3d..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _ASM_KMAP_TYPES_H
-#define _ASM_KMAP_TYPES_H
-
-enum km_type {
-       KM_BOUNCE_READ,
-       KM_SKB_DATA,
-       KM_SKB_DATA_SOFTIRQ,
-       KM_USER0,
-       KM_USER1,
-       KM_TYPE_NR
-};
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ldt.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ldt.h
deleted file mode 100644 (file)
index 9d1110f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * ldt.h
- *
- * Definitions of structures used with the modify_ldt system call.
- */
-#ifndef _LINUX_LDT_H
-#define _LINUX_LDT_H
-
-/* Maximum number of LDT entries supported. */
-#define LDT_ENTRIES    8192
-/* The size of each LDT entry. */
-#define LDT_ENTRY_SIZE 8
-
-#ifndef __ASSEMBLY__
-struct modify_ldt_ldt_s {
-       unsigned int  entry_number;
-       unsigned long base_addr;
-       unsigned int  limit;
-       unsigned int  seg_32bit:1;
-       unsigned int  contents:2;
-       unsigned int  read_exec_only:1;
-       unsigned int  limit_in_pages:1;
-       unsigned int  seg_not_present:1;
-       unsigned int  useable:1;
-};
-
-#define MODIFY_LDT_CONTENTS_DATA       0
-#define MODIFY_LDT_CONTENTS_STACK      1
-#define MODIFY_LDT_CONTENTS_CODE       2
-
-#endif /* !__ASSEMBLY__ */
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/linux_logo.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/linux_logo.h
deleted file mode 100644 (file)
index 1e2fe6c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* $Id: linux_logo.h,v 1.8 1998/07/30 16:30:24 jj Exp $
- * include/asm-i386/linux_logo.h: This is a linux logo
- *                                to be displayed on boot.
- *
- * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
- * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- *
- * You can put anything here, but:
- * LINUX_LOGO_COLORS has to be less than 224
- * image size has to be 80x80
- * values have to start from 0x20
- * (i.e. RGB(linux_logo_red[0],
- *          linux_logo_green[0],
- *          linux_logo_blue[0]) is color 0x20)
- * BW image has to be 80x80 as well, with MS bit
- * on the left
- * Serial_console ascii image can be any size,
- * but should contain %s to display the version
- */
-#include <linux/init.h>
-#include <linux/version.h>
-
-#define linux_logo_banner "Linux/ia32 version " UTS_RELEASE
-
-#include <linux/linux_logo.h>
-
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/locks.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/locks.h
deleted file mode 100644 (file)
index ffcab0a..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- *     SMP locks primitives for building ix86 locks
- *     (not yet used).
- *
- *             Alan Cox, alan@redhat.com, 1995
- */
-/*
- *     This would be much easier but far less clear and easy
- *     to borrow for other processors if it was just assembler.
- */
-
-static __inline__ void prim_spin_lock(struct spinlock *sp)
-{
-       int processor=smp_processor_id();
-       
-       /*
-        *      Grab the lock bit
-        */
-        
-       while(lock_set_bit(0,&sp->lock))
-       {
-               /*
-                *      Failed, but that's cos we own it!
-                */
-                
-               if(sp->cpu==processor)
-               {
-                       sp->users++;
-                       return 0;
-               }
-               /*
-                *      Spin in the cache S state if possible
-                */
-               while(sp->lock)
-               {
-                       /*
-                        *      Wait for any invalidates to go off
-                        */
-                        
-                       if(smp_invalidate_needed&(1<<processor))
-                               while(lock_clear_bit(processor,&smp_invalidate_needed))
-                                       local_flush_tlb();
-                       sp->spins++;
-               }
-               /*
-                *      Someone wrote the line, we go 'I' and get
-                *      the cache entry. Now try to regrab
-                */
-       }
-       sp->users++;sp->cpu=processor;
-       return 1;
-}
-
-/*
- *     Release a spin lock
- */
-static __inline__ int prim_spin_unlock(struct spinlock *sp)
-{
-       /* This is safe. The decrement is still guarded by the lock. A multilock would
-          not be safe this way */
-       if(!--sp->users)
-       {
-               sp->cpu= NO_PROC_ID;lock_clear_bit(0,&sp->lock);
-               return 1;
-       }
-       return 0;
-}
-
-
-/*
- *     Non blocking lock grab
- */
-static __inline__ int prim_spin_lock_nb(struct spinlock *sp)
-{
-       if(lock_set_bit(0,&sp->lock))
-               return 0;               /* Locked already */
-       sp->users++;
-       return 1;                       /* We got the lock */
-}
-
-
-/*
- *     These wrap the locking primitives up for usage
- */
-static __inline__ void spinlock(struct spinlock *sp)
-{
-       if(sp->priority<current->lock_order)
-               panic("lock order violation: %s (%d)\n", sp->name, current->lock_order);
-       if(prim_spin_lock(sp))
-       {
-               /*
-                *      We got a new lock. Update the priority chain
-                */
-               sp->oldpri=current->lock_order;
-               current->lock_order=sp->priority;
-       }
-}
-
-static __inline__ void spinunlock(struct spinlock *sp)
-{
-       int pri;
-       if(current->lock_order!=sp->priority)
-               panic("lock release order violation %s (%d)\n", sp->name, current->lock_order);
-       pri=sp->oldpri;
-       if(prim_spin_unlock(sp))
-       {
-               /*
-                *      Update the debugging lock priority chain. We dumped
-                *      our last right to the lock.
-                */
-               current->lock_order=sp->pri;
-       }       
-}
-
-static __inline__ void spintestlock(struct spinlock *sp)
-{
-       /*
-        *      We do no sanity checks, it's legal to optimistically
-        *      get a lower lock.
-        */
-       prim_spin_lock_nb(sp);
-}
-
-static __inline__ void spintestunlock(struct spinlock *sp)
-{
-       /*
-        *      A testlock doesn't update the lock chain so we
-        *      must not update it on free
-        */
-       prim_spin_unlock(sp);
-}
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/math_emu.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/math_emu.h
deleted file mode 100644 (file)
index bc8421d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef _I386_MATH_EMU_H
-#define _I386_MATH_EMU_H
-
-#include <asm/sigcontext.h>
-
-int restore_i387_soft(void *s387, struct _fpstate *buf);
-int save_i387_soft(void *s387, struct _fpstate * buf);
-
-/* This structure matches the layout of the data saved to the stack
-   following a device-not-present interrupt, part of it saved
-   automatically by the 80386/80486.
-   */
-struct info {
-       long ___orig_eip;
-       long ___ebx;
-       long ___ecx;
-       long ___edx;
-       long ___esi;
-       long ___edi;
-       long ___ebp;
-       long ___eax;
-       long ___ds;
-       long ___es;
-       long ___orig_eax;
-       long ___eip;
-       long ___cs;
-       long ___eflags;
-       long ___esp;
-       long ___ss;
-       long ___vm86_es; /* This and the following only in vm86 mode */
-       long ___vm86_ds;
-       long ___vm86_fs;
-       long ___vm86_gs;
-};
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mc146818rtc.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mc146818rtc.h
deleted file mode 100644 (file)
index d6e3009..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Machine dependent access functions for RTC registers.
- */
-#ifndef _ASM_MC146818RTC_H
-#define _ASM_MC146818RTC_H
-
-#include <asm/io.h>
-
-#ifndef RTC_PORT
-#define RTC_PORT(x)    (0x70 + (x))
-#define RTC_ALWAYS_BCD 1       /* RTC operates in binary mode */
-#endif
-
-/*
- * The yet supported machines all access the RTC index register via
- * an ISA port access but the way to access the date register differs ...
- */
-#define CMOS_READ(addr) ({ \
-outb_p((addr),RTC_PORT(0)); \
-inb_p(RTC_PORT(1)); \
-})
-#define CMOS_WRITE(val, addr) ({ \
-outb_p((addr),RTC_PORT(0)); \
-outb_p((val),RTC_PORT(1)); \
-})
-
-#define RTC_IRQ 8
-
-#endif /* _ASM_MC146818RTC_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mca_dma.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mca_dma.h
deleted file mode 100644 (file)
index 4b3b526..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-#ifndef MCA_DMA_H
-#define MCA_DMA_H
-
-#include <asm/io.h>
-#include <linux/ioport.h>
-
-/*
- * Microchannel specific DMA stuff.  DMA on an MCA machine is fairly similar to
- *   standard PC dma, but it certainly has its quirks.  DMA register addresses
- *   are in a different place and there are some added functions.  Most of this
- *   should be pretty obvious on inspection.  Note that the user must divide
- *   count by 2 when using 16-bit dma; that is not handled by these functions.
- *
- * Ramen Noodles are yummy.
- * 
- *  1998 Tymm Twillman <tymm@computer.org>  
- */
-
-/*
- * Registers that are used by the DMA controller; FN is the function register 
- *   (tell the controller what to do) and EXE is the execution register (how
- *   to do it)
- */
-
-#define MCA_DMA_REG_FN  0x18
-#define MCA_DMA_REG_EXE 0x1A 
-
-/*
- * Functions that the DMA controller can do
- */
-
-#define MCA_DMA_FN_SET_IO       0x00
-#define MCA_DMA_FN_SET_ADDR     0x20
-#define MCA_DMA_FN_GET_ADDR     0x30
-#define MCA_DMA_FN_SET_COUNT    0x40
-#define MCA_DMA_FN_GET_COUNT    0x50
-#define MCA_DMA_FN_GET_STATUS   0x60
-#define MCA_DMA_FN_SET_MODE     0x70
-#define MCA_DMA_FN_SET_ARBUS    0x80
-#define MCA_DMA_FN_MASK         0x90
-#define MCA_DMA_FN_RESET_MASK   0xA0
-#define MCA_DMA_FN_MASTER_CLEAR 0xD0
-
-/*
- * Modes (used by setting MCA_DMA_FN_MODE in the function register)
- * 
- * Note that the MODE_READ is read from memory (write to device), and
- *   MODE_WRITE is vice-versa.  
- */
-
-#define MCA_DMA_MODE_XFER  0x04  /* read by default */
-#define MCA_DMA_MODE_READ  0x04  /* same as XFER */
-#define MCA_DMA_MODE_WRITE 0x08  /* OR with MODE_XFER to use */
-#define MCA_DMA_MODE_IO    0x01  /* DMA from IO register */
-#define MCA_DMA_MODE_16    0x40  /* 16 bit xfers */
-
-
-/**
- *     mca_enable_dma  -       channel to enable DMA on
- *     @dmanr: DMA channel
- *
- *     Enable the MCA bus DMA on a channel. This can be called from
- *     IRQ context.
- */
-
-static __inline__ void mca_enable_dma(unsigned int dmanr)
-{
-       outb(MCA_DMA_FN_RESET_MASK | dmanr, MCA_DMA_REG_FN);
-}
-
-/**
- *     mca_disble_dma  -       channel to disable DMA on
- *     @dmanr: DMA channel
- *
- *     Enable the MCA bus DMA on a channel. This can be called from
- *     IRQ context.
- */
-
-static __inline__ void mca_disable_dma(unsigned int dmanr)
-{
-       outb(MCA_DMA_FN_MASK | dmanr, MCA_DMA_REG_FN);
-}
-
-/**
- *     mca_set_dma_addr -      load a 24bit DMA address
- *     @dmanr: DMA channel
- *     @a: 24bit bus address
- *
- *     Load the address register in the DMA controller. This has a 24bit
- *     limitation (16Mb). 
- */
-
-static __inline__ void mca_set_dma_addr(unsigned int dmanr, unsigned int a)
-{
-       outb(MCA_DMA_FN_SET_ADDR | dmanr, MCA_DMA_REG_FN);
-       outb(a & 0xff, MCA_DMA_REG_EXE);
-       outb((a >> 8) & 0xff, MCA_DMA_REG_EXE);
-       outb((a >> 16) & 0xff, MCA_DMA_REG_EXE);
-}
-
-/**
- *     mca_get_dma_addr -      load a 24bit DMA address
- *     @dmanr: DMA channel
- *
- *     Read the address register in the DMA controller. This has a 24bit
- *     limitation (16Mb). The return is a bus address.
- */
-
-static __inline__ unsigned int mca_get_dma_addr(unsigned int dmanr)
-{
-       unsigned int addr;
-
-       outb(MCA_DMA_FN_GET_ADDR | dmanr, MCA_DMA_REG_FN);
-       addr = inb(MCA_DMA_REG_EXE);
-       addr |= inb(MCA_DMA_REG_EXE) << 8;
-       addr |= inb(MCA_DMA_REG_EXE) << 16;  
-
-       return addr;
-}
-
-/**
- *     mca_set_dma_count -     load a 16bit transfer count
- *     @dmanr: DMA channel
- *     @count: count
- *
- *     Set the DMA count for this channel. This can be up to 64Kbytes.
- *     Setting a count of zero will not do what you expect.
- */
-
-static __inline__ void mca_set_dma_count(unsigned int dmanr, unsigned int count)
-{
-       count--;  /* transfers one more than count -- correct for this */
-
-       outb(MCA_DMA_FN_SET_COUNT | dmanr, MCA_DMA_REG_FN);
-       outb(count & 0xff, MCA_DMA_REG_EXE);
-       outb((count >> 8) & 0xff, MCA_DMA_REG_EXE);
-}
-
-/**
- *     mca_get_dma_residue -   get the remaining bytes to transfer
- *     @dmanr: DMA channel
- *
- *     This function returns the number of bytes left to transfer
- *     on this DMA channel.
- */
-
-static __inline__ unsigned int mca_get_dma_residue(unsigned int dmanr)
-{
-       unsigned short count;
-
-       outb(MCA_DMA_FN_GET_COUNT | dmanr, MCA_DMA_REG_FN);
-       count = 1 + inb(MCA_DMA_REG_EXE);
-       count += inb(MCA_DMA_REG_EXE) << 8;
-
-       return count;
-}
-
-/**
- *     mca_set_dma_io -        set the port for an I/O transfer
- *     @dmanr: DMA channel
- *     @io_addr: an I/O port number
- *
- *     Unlike the ISA bus DMA controllers the DMA on MCA bus can transfer
- *     with an I/O port target.
- */
-
-static __inline__ void mca_set_dma_io(unsigned int dmanr, unsigned int io_addr)
-{
-       /*
-        * DMA from a port address -- set the io address
-        */
-       
-       outb(MCA_DMA_FN_SET_IO | dmanr, MCA_DMA_REG_FN);
-       outb(io_addr & 0xff, MCA_DMA_REG_EXE);
-       outb((io_addr >>  8) & 0xff, MCA_DMA_REG_EXE);
-}
-
-/**
- *     mca_set_dma_mode -      set the DMA mode
- *     @dmanr: DMA channel
- *     @mode: mode to set
- *
- *     The DMA controller supports several modes. The mode values you can
- *     set are :
- *
- *     %MCA_DMA_MODE_READ when reading from the DMA device.
- *
- *     %MCA_DMA_MODE_WRITE to writing to the DMA device.
- *
- *     %MCA_DMA_MODE_IO to do DMA to or from an I/O port.
- *
- *     %MCA_DMA_MODE_16 to do 16bit transfers.
- *
- */
-
-static __inline__ void mca_set_dma_mode(unsigned int dmanr, unsigned int mode)
-{
-       outb(MCA_DMA_FN_SET_MODE | dmanr, MCA_DMA_REG_FN);
-       outb(mode, MCA_DMA_REG_EXE);
-}
-
-#endif /* MCA_DMA_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mman.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mman.h
deleted file mode 100644 (file)
index f953c43..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef __I386_MMAN_H__
-#define __I386_MMAN_H__
-
-#define PROT_READ      0x1             /* page can be read */
-#define PROT_WRITE     0x2             /* page can be written */
-#define PROT_EXEC      0x4             /* page can be executed */
-#define PROT_NONE      0x0             /* page can not be accessed */
-
-#define MAP_SHARED     0x01            /* Share changes */
-#define MAP_PRIVATE    0x02            /* Changes are private */
-#define MAP_TYPE       0x0f            /* Mask for type of mapping */
-#define MAP_FIXED      0x10            /* Interpret addr exactly */
-#define MAP_ANONYMOUS  0x20            /* don't use a file */
-
-#define MAP_GROWSDOWN  0x0100          /* stack-like segment */
-#define MAP_DENYWRITE  0x0800          /* ETXTBSY */
-#define MAP_EXECUTABLE 0x1000          /* mark it as an executable */
-#define MAP_LOCKED     0x2000          /* pages are locked */
-#define MAP_NORESERVE  0x4000          /* don't check for reservations */
-
-#define MS_ASYNC       1               /* sync memory asynchronously */
-#define MS_INVALIDATE  2               /* invalidate the caches */
-#define MS_SYNC                4               /* synchronous memory sync */
-
-#define MCL_CURRENT    1               /* lock all current mappings */
-#define MCL_FUTURE     2               /* lock all future mappings */
-
-#define MADV_NORMAL    0x0             /* default page-in behavior */
-#define MADV_RANDOM    0x1             /* page-in minimum required */
-#define MADV_SEQUENTIAL        0x2             /* read-ahead aggressively */
-#define MADV_WILLNEED  0x3             /* pre-fault pages */
-#define MADV_DONTNEED  0x4             /* discard these pages */
-
-/* compatibility flags */
-#define MAP_ANON       MAP_ANONYMOUS
-#define MAP_FILE       0
-
-#endif /* __I386_MMAN_H__ */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu.h
deleted file mode 100644 (file)
index 6a47b34..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#ifndef __i386_MMU_H
-#define __i386_MMU_H
-
-#include <linux/list.h>
-
-/* describes dirrectly mapped vma nodes */
-typedef struct {
-    struct list_head list;
-    unsigned long vm_start;
-       unsigned long vm_end;
-} direct_mmap_node_t;
-
-/*
- * The i386 doesn't have a mmu context, but
- * we put the segment information here.
- */
-typedef struct { 
-       void *segments;
-       unsigned long cpuvalid;
-    struct list_head direct_list;
-} mm_context_t;
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu_context.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mmu_context.h
deleted file mode 100644 (file)
index b203b39..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-
-#ifndef __I386_MMU_CONTEXT_H
-#define __I386_MMU_CONTEXT_H
-
-#include <linux/config.h>
-#include <asm/desc.h>
-#include <asm/atomic.h>
-#include <asm/pgalloc.h>
-
-/*
- * possibly do the LDT unload here?
- */
-
-extern int init_new_context(struct task_struct *tsk, struct mm_struct *);
-extern void destroy_context(struct mm_struct *);
-
-//#define destroy_context(mm)          do { } while(0)
-//#define init_new_context(tsk,mm)     0
-
-#ifdef CONFIG_SMP
-
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk, unsigned cpu)
-{
-       if(cpu_tlbstate[cpu].state == TLBSTATE_OK)
-               cpu_tlbstate[cpu].state = TLBSTATE_LAZY;        
-}
-#else
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk, unsigned cpu)
-{
-}
-#endif
-
-extern pgd_t *cur_pgd;
-
-static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk, unsigned cpu)
-{
-       if (prev != next) {
-               /* stop flush ipis for the previous mm */
-               clear_bit(cpu, &prev->cpu_vm_mask);
-               /*
-                * Re-load LDT if necessary
-                */
-               if (prev->context.segments != next->context.segments)
-                       load_LDT(next);
-#ifdef CONFIG_SMP
-               cpu_tlbstate[cpu].state = TLBSTATE_OK;
-               cpu_tlbstate[cpu].active_mm = next;
-#endif
-               set_bit(cpu, &next->cpu_vm_mask);
-               set_bit(cpu, &next->context.cpuvalid);
-               /* Re-load page tables */
-                cur_pgd = next->pgd;
-                queue_pt_switch(__pa(cur_pgd));
-                XENO_flush_page_update_queue();
-       }
-#ifdef CONFIG_SMP
-       else {
-               cpu_tlbstate[cpu].state = TLBSTATE_OK;
-               if(cpu_tlbstate[cpu].active_mm != next)
-                       BUG();
-               if(!test_and_set_bit(cpu, &next->cpu_vm_mask)) {
-                       /* We were in lazy tlb mode and leave_mm disabled 
-                        * tlb flush IPI delivery. We must flush our tlb.
-                        */
-                       local_flush_tlb();
-               }
-               if (!test_and_set_bit(cpu, &next->context.cpuvalid))
-                       load_LDT(next);
-       }
-#endif
-}
-
-#define activate_mm(prev, next) \
-       switch_mm((prev),(next),NULL,smp_processor_id())
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mmx.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mmx.h
deleted file mode 100644 (file)
index 46b71da..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _ASM_MMX_H
-#define _ASM_MMX_H
-
-/*
- *     MMX 3Dnow! helper operations
- */
-
-#include <linux/types.h>
-extern void *_mmx_memcpy(void *to, const void *from, size_t size);
-extern void mmx_clear_page(void *page);
-extern void mmx_copy_page(void *to, void *from);
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/module.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/module.h
deleted file mode 100644 (file)
index a552173..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _ASM_I386_MODULE_H
-#define _ASM_I386_MODULE_H
-/*
- * This file contains the i386 architecture specific module code.
- */
-
-#define module_map(x)          vmalloc(x)
-#define module_unmap(x)                vfree(x)
-#define module_arch_init(x)    (0)
-#define arch_init_modules(x)   do { } while (0)
-
-#endif /* _ASM_I386_MODULE_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mpspec.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mpspec.h
deleted file mode 100644 (file)
index b5719c0..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#ifndef __ASM_MPSPEC_H
-#define __ASM_MPSPEC_H
-
-/*
- * Structure definitions for SMP machines following the
- * Intel Multiprocessing Specification 1.1 and 1.4.
- */
-
-/*
- * This tag identifies where the SMP configuration
- * information is. 
- */
-#define SMP_MAGIC_IDENT        (('_'<<24)|('P'<<16)|('M'<<8)|'_')
-
-/*
- * a maximum of 16 APICs with the current APIC ID architecture.
- */
-#ifdef CONFIG_MULTIQUAD
-#define MAX_APICS 256
-#else /* !CONFIG_MULTIQUAD */
-#define MAX_APICS 16
-#endif /* CONFIG_MULTIQUAD */
-
-#define MAX_MPC_ENTRY 1024
-
-struct intel_mp_floating
-{
-       char mpf_signature[4];          /* "_MP_"                       */
-       unsigned long mpf_physptr;      /* Configuration table address  */
-       unsigned char mpf_length;       /* Our length (paragraphs)      */
-       unsigned char mpf_specification;/* Specification version        */
-       unsigned char mpf_checksum;     /* Checksum (makes sum 0)       */
-       unsigned char mpf_feature1;     /* Standard or configuration ?  */
-       unsigned char mpf_feature2;     /* Bit7 set for IMCR|PIC        */
-       unsigned char mpf_feature3;     /* Unused (0)                   */
-       unsigned char mpf_feature4;     /* Unused (0)                   */
-       unsigned char mpf_feature5;     /* Unused (0)                   */
-};
-
-struct mp_config_table
-{
-       char mpc_signature[4];
-#define MPC_SIGNATURE "PCMP"
-       unsigned short mpc_length;      /* Size of table */
-       char  mpc_spec;                 /* 0x01 */
-       char  mpc_checksum;
-       char  mpc_oem[8];
-       char  mpc_productid[12];
-       unsigned long mpc_oemptr;       /* 0 if not present */
-       unsigned short mpc_oemsize;     /* 0 if not present */
-       unsigned short mpc_oemcount;
-       unsigned long mpc_lapic;        /* APIC address */
-       unsigned long reserved;
-};
-
-/* Followed by entries */
-
-#define        MP_PROCESSOR    0
-#define        MP_BUS          1
-#define        MP_IOAPIC       2
-#define        MP_INTSRC       3
-#define        MP_LINTSRC      4
-#define        MP_TRANSLATION  192  /* Used by IBM NUMA-Q to describe node locality */
-
-struct mpc_config_processor
-{
-       unsigned char mpc_type;
-       unsigned char mpc_apicid;       /* Local APIC number */
-       unsigned char mpc_apicver;      /* Its versions */
-       unsigned char mpc_cpuflag;
-#define CPU_ENABLED            1       /* Processor is available */
-#define CPU_BOOTPROCESSOR      2       /* Processor is the BP */
-       unsigned long mpc_cpufeature;           
-#define CPU_STEPPING_MASK 0x0F
-#define CPU_MODEL_MASK 0xF0
-#define CPU_FAMILY_MASK        0xF00
-       unsigned long mpc_featureflag;  /* CPUID feature value */
-       unsigned long mpc_reserved[2];
-};
-
-struct mpc_config_bus
-{
-       unsigned char mpc_type;
-       unsigned char mpc_busid;
-       unsigned char mpc_bustype[6] __attribute((packed));
-};
-
-/* List of Bus Type string values, Intel MP Spec. */
-#define BUSTYPE_EISA   "EISA"
-#define BUSTYPE_ISA    "ISA"
-#define BUSTYPE_INTERN "INTERN"        /* Internal BUS */
-#define BUSTYPE_MCA    "MCA"
-#define BUSTYPE_VL     "VL"            /* Local bus */
-#define BUSTYPE_PCI    "PCI"
-#define BUSTYPE_PCMCIA "PCMCIA"
-#define BUSTYPE_CBUS   "CBUS"
-#define BUSTYPE_CBUSII "CBUSII"
-#define BUSTYPE_FUTURE "FUTURE"
-#define BUSTYPE_MBI    "MBI"
-#define BUSTYPE_MBII   "MBII"
-#define BUSTYPE_MPI    "MPI"
-#define BUSTYPE_MPSA   "MPSA"
-#define BUSTYPE_NUBUS  "NUBUS"
-#define BUSTYPE_TC     "TC"
-#define BUSTYPE_VME    "VME"
-#define BUSTYPE_XPRESS "XPRESS"
-
-struct mpc_config_ioapic
-{
-       unsigned char mpc_type;
-       unsigned char mpc_apicid;
-       unsigned char mpc_apicver;
-       unsigned char mpc_flags;
-#define MPC_APIC_USABLE                0x01
-       unsigned long mpc_apicaddr;
-};
-
-struct mpc_config_intsrc
-{
-       unsigned char mpc_type;
-       unsigned char mpc_irqtype;
-       unsigned short mpc_irqflag;
-       unsigned char mpc_srcbus;
-       unsigned char mpc_srcbusirq;
-       unsigned char mpc_dstapic;
-       unsigned char mpc_dstirq;
-};
-
-enum mp_irq_source_types {
-       mp_INT = 0,
-       mp_NMI = 1,
-       mp_SMI = 2,
-       mp_ExtINT = 3
-};
-
-#define MP_IRQDIR_DEFAULT      0
-#define MP_IRQDIR_HIGH         1
-#define MP_IRQDIR_LOW          3
-
-
-struct mpc_config_lintsrc
-{
-       unsigned char mpc_type;
-       unsigned char mpc_irqtype;
-       unsigned short mpc_irqflag;
-       unsigned char mpc_srcbusid;
-       unsigned char mpc_srcbusirq;
-       unsigned char mpc_destapic;     
-#define MP_APIC_ALL    0xFF
-       unsigned char mpc_destapiclint;
-};
-
-struct mp_config_oemtable
-{
-       char oem_signature[4];
-#define MPC_OEM_SIGNATURE "_OEM"
-       unsigned short oem_length;      /* Size of table */
-       char  oem_rev;                  /* 0x01 */
-       char  oem_checksum;
-       char  mpc_oem[8];
-};
-
-struct mpc_config_translation
-{
-        unsigned char mpc_type;
-        unsigned char trans_len;
-        unsigned char trans_type;
-        unsigned char trans_quad;
-        unsigned char trans_global;
-        unsigned char trans_local;
-        unsigned short trans_reserved;
-};
-
-/*
- *     Default configurations
- *
- *     1       2 CPU ISA 82489DX
- *     2       2 CPU EISA 82489DX neither IRQ 0 timer nor IRQ 13 DMA chaining
- *     3       2 CPU EISA 82489DX
- *     4       2 CPU MCA 82489DX
- *     5       2 CPU ISA+PCI
- *     6       2 CPU EISA+PCI
- *     7       2 CPU MCA+PCI
- */
-
-#ifdef CONFIG_MULTIQUAD
-#define MAX_IRQ_SOURCES 512
-#else /* !CONFIG_MULTIQUAD */
-#define MAX_IRQ_SOURCES 256
-#endif /* CONFIG_MULTIQUAD */
-
-#define MAX_MP_BUSSES 32
-enum mp_bustype {
-       MP_BUS_ISA = 1,
-       MP_BUS_EISA,
-       MP_BUS_PCI,
-       MP_BUS_MCA
-};
-extern int mp_bus_id_to_type [MAX_MP_BUSSES];
-extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
-
-extern unsigned int boot_cpu_physical_apicid;
-extern unsigned long phys_cpu_present_map;
-extern int smp_found_config;
-extern void find_smp_config (void);
-extern void get_smp_config (void);
-extern int nr_ioapics;
-extern int apic_version [MAX_APICS];
-extern int mp_bus_id_to_type [MAX_MP_BUSSES];
-extern int mp_irq_entries;
-extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES];
-extern int mpc_default_type;
-extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
-extern int mp_current_pci_id;
-extern unsigned long mp_lapic_addr;
-extern int pic_mode;
-extern int using_apic_timer;
-
-#endif
-
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/msgbuf.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/msgbuf.h
deleted file mode 100644 (file)
index b8d659c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _I386_MSGBUF_H
-#define _I386_MSGBUF_H
-
-/* 
- * The msqid64_ds structure for i386 architecture.
- * Note extra padding because this structure is passed back and forth
- * between kernel and user space.
- *
- * Pad space is left for:
- * - 64-bit time_t to solve y2038 problem
- * - 2 miscellaneous 32-bit values
- */
-
-struct msqid64_ds {
-       struct ipc64_perm msg_perm;
-       __kernel_time_t msg_stime;      /* last msgsnd time */
-       unsigned long   __unused1;
-       __kernel_time_t msg_rtime;      /* last msgrcv time */
-       unsigned long   __unused2;
-       __kernel_time_t msg_ctime;      /* last change time */
-       unsigned long   __unused3;
-       unsigned long  msg_cbytes;      /* current number of bytes on queue */
-       unsigned long  msg_qnum;        /* number of messages in queue */
-       unsigned long  msg_qbytes;      /* max number of bytes on queue */
-       __kernel_pid_t msg_lspid;       /* pid of last msgsnd */
-       __kernel_pid_t msg_lrpid;       /* last receive pid */
-       unsigned long  __unused4;
-       unsigned long  __unused5;
-};
-
-#endif /* _I386_MSGBUF_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/msr.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/msr.h
deleted file mode 100644 (file)
index 11bcb7f..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef __ASM_MSR_H
-#define __ASM_MSR_H
-
-/*
- * Access to machine-specific registers (available on 586 and better only)
- * Note: the rd* operations modify the parameters directly (without using
- * pointer indirection), this allows gcc to optimize better
- */
-
-#define rdmsr(msr,val1,val2) \
-     __asm__ __volatile__("rdmsr" \
-                         : "=a" (val1), "=d" (val2) \
-                         : "c" (msr))
-
-#define wrmsr(msr,val1,val2) \
-     __asm__ __volatile__("wrmsr" \
-                         : /* no outputs */ \
-                         : "c" (msr), "a" (val1), "d" (val2))
-
-#define rdtsc(low,high) \
-     __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
-
-#define rdtscl(low) \
-     __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx")
-
-#define rdtscll(val) \
-     __asm__ __volatile__("rdtsc" : "=A" (val))
-
-#define write_tsc(val1,val2) wrmsr(0x10, val1, val2)
-
-#define rdpmc(counter,low,high) \
-     __asm__ __volatile__("rdpmc" \
-                         : "=a" (low), "=d" (high) \
-                         : "c" (counter))
-
-/* symbolic names for some interesting MSRs */
-/* Intel defined MSRs. */
-#define MSR_IA32_P5_MC_ADDR            0
-#define MSR_IA32_P5_MC_TYPE            1
-#define MSR_IA32_PLATFORM_ID           0x17
-#define MSR_IA32_EBL_CR_POWERON                0x2a
-
-#define MSR_IA32_APICBASE              0x1b
-#define MSR_IA32_APICBASE_BSP          (1<<8)
-#define MSR_IA32_APICBASE_ENABLE       (1<<11)
-#define MSR_IA32_APICBASE_BASE         (0xfffff<<12)
-
-#define MSR_IA32_UCODE_WRITE           0x79
-#define MSR_IA32_UCODE_REV             0x8b
-
-#define MSR_IA32_PERFCTR0              0xc1
-#define MSR_IA32_PERFCTR1              0xc2
-
-#define MSR_IA32_BBL_CR_CTL            0x119
-
-#define MSR_IA32_MCG_CAP               0x179
-#define MSR_IA32_MCG_STATUS            0x17a
-#define MSR_IA32_MCG_CTL               0x17b
-
-#define MSR_IA32_EVNTSEL0              0x186
-#define MSR_IA32_EVNTSEL1              0x187
-
-#define MSR_IA32_DEBUGCTLMSR           0x1d9
-#define MSR_IA32_LASTBRANCHFROMIP      0x1db
-#define MSR_IA32_LASTBRANCHTOIP                0x1dc
-#define MSR_IA32_LASTINTFROMIP         0x1dd
-#define MSR_IA32_LASTINTTOIP           0x1de
-
-#define MSR_IA32_MC0_CTL               0x400
-#define MSR_IA32_MC0_STATUS            0x401
-#define MSR_IA32_MC0_ADDR              0x402
-#define MSR_IA32_MC0_MISC              0x403
-
-/* AMD Defined MSRs */
-#define MSR_K6_EFER                    0xC0000080
-#define MSR_K6_STAR                    0xC0000081
-#define MSR_K6_WHCR                    0xC0000082
-#define MSR_K6_UWCCR                   0xC0000085
-#define MSR_K6_PSOR                    0xC0000087
-#define MSR_K6_PFIR                    0xC0000088
-
-#define MSR_K7_EVNTSEL0                        0xC0010000
-#define MSR_K7_PERFCTR0                        0xC0010004
-
-/* Centaur-Hauls/IDT defined MSRs. */
-#define MSR_IDT_FCR1                   0x107
-#define MSR_IDT_FCR2                   0x108
-#define MSR_IDT_FCR3                   0x109
-#define MSR_IDT_FCR4                   0x10a
-
-#define MSR_IDT_MCR0                   0x110
-#define MSR_IDT_MCR1                   0x111
-#define MSR_IDT_MCR2                   0x112
-#define MSR_IDT_MCR3                   0x113
-#define MSR_IDT_MCR4                   0x114
-#define MSR_IDT_MCR5                   0x115
-#define MSR_IDT_MCR6                   0x116
-#define MSR_IDT_MCR7                   0x117
-#define MSR_IDT_MCR_CTRL               0x120
-
-/* VIA Cyrix defined MSRs*/
-#define MSR_VIA_FCR                    0x1107
-
-#endif /* __ASM_MSR_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/mtrr.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/mtrr.h
deleted file mode 100644 (file)
index ff3ea87..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*  Generic MTRR (Memory Type Range Register) ioctls.
-
-    Copyright (C) 1997-1999  Richard Gooch
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    Richard Gooch may be reached by email at  rgooch@atnf.csiro.au
-    The postal address is:
-      Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia.
-*/
-#ifndef _LINUX_MTRR_H
-#define _LINUX_MTRR_H
-
-#include <linux/config.h>
-#include <linux/ioctl.h>
-
-#define        MTRR_IOCTL_BASE 'M'
-
-struct mtrr_sentry
-{
-    unsigned long base;    /*  Base address     */
-    unsigned long size;    /*  Size of region   */
-    unsigned int type;     /*  Type of region   */
-};
-
-struct mtrr_gentry
-{
-    unsigned int regnum;   /*  Register number  */
-    unsigned long base;    /*  Base address     */
-    unsigned long size;    /*  Size of region   */
-    unsigned int type;     /*  Type of region   */
-};
-
-/*  These are the various ioctls  */
-#define MTRRIOC_ADD_ENTRY        _IOW(MTRR_IOCTL_BASE,  0, struct mtrr_sentry)
-#define MTRRIOC_SET_ENTRY        _IOW(MTRR_IOCTL_BASE,  1, struct mtrr_sentry)
-#define MTRRIOC_DEL_ENTRY        _IOW(MTRR_IOCTL_BASE,  2, struct mtrr_sentry)
-#define MTRRIOC_GET_ENTRY        _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry)
-#define MTRRIOC_KILL_ENTRY       _IOW(MTRR_IOCTL_BASE,  4, struct mtrr_sentry)
-#define MTRRIOC_ADD_PAGE_ENTRY   _IOW(MTRR_IOCTL_BASE,  5, struct mtrr_sentry)
-#define MTRRIOC_SET_PAGE_ENTRY   _IOW(MTRR_IOCTL_BASE,  6, struct mtrr_sentry)
-#define MTRRIOC_DEL_PAGE_ENTRY   _IOW(MTRR_IOCTL_BASE,  7, struct mtrr_sentry)
-#define MTRRIOC_GET_PAGE_ENTRY   _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry)
-#define MTRRIOC_KILL_PAGE_ENTRY  _IOW(MTRR_IOCTL_BASE,  9, struct mtrr_sentry)
-
-/*  These are the region types  */
-#define MTRR_TYPE_UNCACHABLE 0
-#define MTRR_TYPE_WRCOMB     1
-/*#define MTRR_TYPE_         2*/
-/*#define MTRR_TYPE_         3*/
-#define MTRR_TYPE_WRTHROUGH  4
-#define MTRR_TYPE_WRPROT     5
-#define MTRR_TYPE_WRBACK     6
-#define MTRR_NUM_TYPES       7
-
-#ifdef MTRR_NEED_STRINGS
-static char *mtrr_strings[MTRR_NUM_TYPES] =
-{
-    "uncachable",               /* 0 */
-    "write-combining",          /* 1 */
-    "?",                        /* 2 */
-    "?",                        /* 3 */
-    "write-through",            /* 4 */
-    "write-protect",            /* 5 */
-    "write-back",               /* 6 */
-};
-#endif
-
-#ifdef __KERNEL__
-
-/*  The following functions are for use by other drivers  */
-# ifdef CONFIG_MTRR
-extern int mtrr_add (unsigned long base, unsigned long size,
-                    unsigned int type, char increment);
-extern int mtrr_add_page (unsigned long base, unsigned long size,
-                    unsigned int type, char increment);
-extern int mtrr_del (int reg, unsigned long base, unsigned long size);
-extern int mtrr_del_page (int reg, unsigned long base, unsigned long size);
-extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);
-#  else
-static __inline__ int mtrr_add (unsigned long base, unsigned long size,
-                               unsigned int type, char increment)
-{
-    return -ENODEV;
-}
-static __inline__ int mtrr_add_page (unsigned long base, unsigned long size,
-                               unsigned int type, char increment)
-{
-    return -ENODEV;
-}
-static __inline__ int mtrr_del (int reg, unsigned long base,
-                               unsigned long size)
-{
-    return -ENODEV;
-}
-static __inline__ int mtrr_del_page (int reg, unsigned long base,
-                               unsigned long size)
-{
-    return -ENODEV;
-}
-
-static __inline__ void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi) {;}
-
-#  endif
-
-/*  The following functions are for initialisation: don't use them!  */
-extern int mtrr_init (void);
-#  if defined(CONFIG_SMP) && defined(CONFIG_MTRR)
-extern void mtrr_init_boot_cpu (void);
-extern void mtrr_init_secondary_cpu (void);
-#  endif
-
-#endif
-
-#endif  /*  _LINUX_MTRR_H  */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/namei.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/namei.h
deleted file mode 100644 (file)
index 8148650..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
- * linux/include/asm-i386/namei.h
- *
- * Included from linux/fs/namei.c
- */
-
-#ifndef __I386_NAMEI_H
-#define __I386_NAMEI_H
-
-/* This dummy routine maybe changed to something useful
- * for /usr/gnemul/ emulation stuff.
- * Look at asm-sparc/namei.h for details.
- */
-
-#define __emul_prefix() NULL
-
-#endif /* __I386_NAMEI_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/page.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/page.h
deleted file mode 100644 (file)
index ae2aa28..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-#ifndef _I386_PAGE_H
-#define _I386_PAGE_H
-
-/* PAGE_SHIFT determines the page size */
-#define PAGE_SHIFT     12
-#define PAGE_SIZE      (1UL << PAGE_SHIFT)
-#define PAGE_MASK      (~(PAGE_SIZE-1))
-
-#ifdef __KERNEL__
-#ifndef __ASSEMBLY__
-
-#include <linux/config.h>
-#include <asm/hypervisor.h>
-
-#ifdef CONFIG_X86_USE_3DNOW
-
-#include <asm/mmx.h>
-
-#define clear_page(page)       mmx_clear_page((void *)(page))
-#define copy_page(to,from)     mmx_copy_page(to,from)
-
-#else
-
-/*
- *     On older X86 processors its not a win to use MMX here it seems.
- *     Maybe the K6-III ?
- */
-#define clear_page(page)       memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from)     memcpy((void *)(to), (void *)(from), PAGE_SIZE)
-
-#endif
-
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
-
-/**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/
-extern unsigned long *phys_to_machine_mapping;
-#define pfn_to_mfn(_pfn) (phys_to_machine_mapping[(_pfn)])
-#define mfn_to_pfn(_mfn) (machine_to_phys_mapping[(_mfn)])
-static inline unsigned long phys_to_machine(unsigned long phys)
-{
-    unsigned long machine = pfn_to_mfn(phys >> PAGE_SHIFT);
-    machine = (machine << PAGE_SHIFT) | (phys & ~PAGE_MASK);
-    return machine;
-}
-static inline unsigned long machine_to_phys(unsigned long machine)
-{
-    unsigned long phys = mfn_to_pfn(machine >> PAGE_SHIFT);
-    phys = (phys << PAGE_SHIFT) | (machine & ~PAGE_MASK);
-    return phys;
-}
-
-/*
- * These are used to make use of C type-checking..
- */
-#if CONFIG_X86_PAE
-typedef struct { unsigned long pte_low, pte_high; } pte_t;
-typedef struct { unsigned long long pmd; } pmd_t;
-typedef struct { unsigned long long pgd; } pgd_t;
-#define pte_val(x)     ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
-#else
-typedef struct { unsigned long pte_low; } pte_t;
-typedef struct { unsigned long pmd; } pmd_t;
-typedef struct { unsigned long pgd; } pgd_t;
-static inline unsigned long pte_val(pte_t x)
-{
-    unsigned long ret = x.pte_low;
-    if ( (ret & 1) ) ret = machine_to_phys(ret);
-    return ret;
-}
-#endif
-#define PTE_MASK       PAGE_MASK
-
-typedef struct { unsigned long pgprot; } pgprot_t;
-
-static inline unsigned long pmd_val(pmd_t x)
-{
-    unsigned long ret = x.pmd;
-    if ( (ret & 1) ) ret = machine_to_phys(ret);
-    return ret;
-}
-#define pgd_val(x)     ({ BUG(); (unsigned long)0; })
-#define pgprot_val(x)  ((x).pgprot)
-
-static inline pte_t __pte(unsigned long x)
-{
-    if ( (x & 1) ) x = phys_to_machine(x);
-    return ((pte_t) { (x) });
-}
-static inline pmd_t __pmd(unsigned long x)
-{
-    if ( (x & 1) ) x = phys_to_machine(x);
-    return ((pmd_t) { (x) });
-}
-#define __pgd(x) ({ BUG(); (pgprot_t) { 0 }; })
-#define __pgprot(x)    ((pgprot_t) { (x) } )
-
-#endif /* !__ASSEMBLY__ */
-
-/* to align the pointer to the (next) page boundary */
-#define PAGE_ALIGN(addr)       (((addr)+PAGE_SIZE-1)&PAGE_MASK)
-
-/*
- * This handles the memory map.. We could make this a config
- * option, but too many people screw it up, and too few need
- * it.
- *
- * A __PAGE_OFFSET of 0xC0000000 means that the kernel has
- * a virtual address space of one gigabyte, which limits the
- * amount of physical memory you can use to about 950MB. 
- *
- * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
- * and CONFIG_HIGHMEM64G options in the kernel configuration.
- */
-
-#define __PAGE_OFFSET          (0xC0000000)
-
-#ifndef __ASSEMBLY__
-
-/*
- * Tell the user there is some problem. Beep too, so we can
- * see^H^H^Hhear bugs in early bootup as well!
- */
-
-#ifdef CONFIG_DEBUG_BUGVERBOSE
-extern void do_BUG(const char *file, int line);
-#define BUG() do {                                     \
-       do_BUG(__FILE__, __LINE__);                     \
-       __asm__ __volatile__("ud2");                    \
-} while (0)
-#else
-#define BUG() __asm__ __volatile__(".byte 0x0f,0x0b")
-#endif
-
-#define PAGE_BUG(page) do { \
-       BUG(); \
-} while (0)
-
-/* Pure 2^n version of get_order */
-static __inline__ int get_order(unsigned long size)
-{
-       int order;
-
-       size = (size-1) >> (PAGE_SHIFT-1);
-       order = -1;
-       do {
-               size >>= 1;
-               order++;
-       } while (size);
-       return order;
-}
-
-#endif /* __ASSEMBLY__ */
-
-#define PAGE_OFFSET            ((unsigned long)__PAGE_OFFSET)
-#define __pa(x)                        ((unsigned long)(x)-PAGE_OFFSET)
-#define __va(x)                        ((void *)((unsigned long)(x)+PAGE_OFFSET))
-#define virt_to_page(kaddr)    (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
-#define VALID_PAGE(page)       ((page - mem_map) < max_mapnr)
-
-#endif /* __KERNEL__ */
-
-#endif /* _I386_PAGE_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/param.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/param.h
deleted file mode 100644 (file)
index 1b10bf4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _ASMi386_PARAM_H
-#define _ASMi386_PARAM_H
-
-#ifndef HZ
-#define HZ 100
-#endif
-
-#define EXEC_PAGESIZE  4096
-
-#ifndef NGROUPS
-#define NGROUPS                32
-#endif
-
-#ifndef NOGROUP
-#define NOGROUP                (-1)
-#endif
-
-#define MAXHOSTNAMELEN 64      /* max length of hostname */
-
-#ifdef __KERNEL__
-# define CLOCKS_PER_SEC        100     /* frequency at which times() counts */
-#endif
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/parport.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/parport.h
deleted file mode 100644 (file)
index fa0e321..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * parport.h: ia32-specific parport initialisation
- *
- * Copyright (C) 1999, 2000  Tim Waugh <tim@cyberelk.demon.co.uk>
- *
- * This file should only be included by drivers/parport/parport_pc.c.
- */
-
-#ifndef _ASM_I386_PARPORT_H
-#define _ASM_I386_PARPORT_H 1
-
-static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma);
-static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
-{
-       return parport_pc_find_isa_ports (autoirq, autodma);
-}
-
-#endif /* !(_ASM_I386_PARPORT_H) */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgalloc.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgalloc.h
deleted file mode 100644 (file)
index 797da69..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-#ifndef _I386_PGALLOC_H
-#define _I386_PGALLOC_H
-
-#include <linux/config.h>
-#include <asm/processor.h>
-#include <asm/hypervisor.h>
-#include <linux/threads.h>
-
-/*
- * Quick lists are aligned so that least significant bits of array pointer
- * are all zero when list is empty, and all one when list is full.
- */
-#define QUICKLIST_ENTRIES 256
-#define QUICKLIST_EMPTY(_l) !((unsigned long)(_l) & ((QUICKLIST_ENTRIES*4)-1))
-#define QUICKLIST_FULL(_l)  QUICKLIST_EMPTY((_l)+1)
-#define pgd_quicklist (current_cpu_data.pgd_quick)
-#define pmd_quicklist (current_cpu_data.pmd_quick)
-#define pte_quicklist (current_cpu_data.pte_quick)
-#define pgtable_cache_size (current_cpu_data.pgtable_cache_sz)
-
-#define pmd_populate(mm, pmd, pte)                \
- do {                                             \
-  set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte)));   \
-  XENO_flush_page_update_queue();                 \
- } while ( 0 )
-
-static __inline__ pgd_t *get_pgd_slow(void)
-{
-    pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-    pgd_t *kpgd;
-    pmd_t *kpmd;
-    pte_t *kpte;
-
-    if (pgd) {
-        memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
-        memcpy(pgd + USER_PTRS_PER_PGD, 
-               init_mm.pgd + USER_PTRS_PER_PGD, 
-               (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-        kpgd = pgd_offset_k((unsigned long)pgd);
-        kpmd = pmd_offset(kpgd, (unsigned long)pgd);
-        kpte = pte_offset(kpmd, (unsigned long)pgd);
-        queue_l1_entry_update(__pa(kpte), (*(unsigned long *)kpte)&~_PAGE_RW);
-        queue_pgd_pin(__pa(pgd));
-    }
-
-    return pgd;
-}
-
-static __inline__ void free_pgd_slow(pgd_t *pgd)
-{
-    pgd_t *kpgd;
-    pmd_t *kpmd;
-    pte_t *kpte;
-    queue_pgd_unpin(__pa(pgd));
-    kpgd = pgd_offset_k((unsigned long)pgd);
-    kpmd = pmd_offset(kpgd, (unsigned long)pgd);
-    kpte = pte_offset(kpmd, (unsigned long)pgd);
-    queue_l1_entry_update(__pa(kpte), (*(unsigned long *)kpte)|_PAGE_RW);
-    free_page((unsigned long)pgd);
-}
-
-static __inline__ pgd_t *get_pgd_fast(void)
-{
-    unsigned long ret;
-
-    if ( !QUICKLIST_EMPTY(pgd_quicklist) ) {
-        ret = *(--pgd_quicklist);
-        pgtable_cache_size--;
-    } else
-        ret = (unsigned long)get_pgd_slow();
-    return (pgd_t *)ret;
-}
-
-static __inline__ void free_pgd_fast(pgd_t *pgd)
-{
-    if ( !QUICKLIST_FULL(pgd_quicklist) ) {
-        *(pgd_quicklist++) = (unsigned long)pgd;
-        pgtable_cache_size++;
-    } else
-        free_pgd_slow(pgd);
-}
-
-static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address)
-{
-    pte_t *pte;
-    pgd_t *kpgd;
-    pmd_t *kpmd;
-    pte_t *kpte;
-
-    pte = (pte_t *) __get_free_page(GFP_KERNEL);
-    if (pte)
-    {
-        clear_page(pte);
-        kpgd = pgd_offset_k((unsigned long)pte);
-        kpmd = pmd_offset(kpgd, (unsigned long)pte);
-        kpte = pte_offset(kpmd, (unsigned long)pte);
-        queue_l1_entry_update(__pa(kpte), (*(unsigned long *)kpte)&~_PAGE_RW);
-        queue_pte_pin(__pa(pte));
-    }
-    return pte;
-}
-
-static __inline__ void pte_free_slow(pte_t *pte)
-{
-    pgd_t *kpgd;
-    pmd_t *kpmd;
-    pte_t *kpte;
-    queue_pte_unpin(__pa(pte));
-    kpgd = pgd_offset_k((unsigned long)pte);
-    kpmd = pmd_offset(kpgd, (unsigned long)pte);
-    kpte = pte_offset(kpmd, (unsigned long)pte);
-    queue_l1_entry_update(__pa(kpte), (*(unsigned long *)kpte)|_PAGE_RW);
-    free_page((unsigned long)pte);
-}
-
-static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, unsigned long address)
-{
-    unsigned long ret = 0;
-    if ( !QUICKLIST_EMPTY(pte_quicklist) ) {
-        ret = *(--pte_quicklist);
-        pgtable_cache_size--;
-    }
-    return (pte_t *)ret;
-}
-
-static __inline__ void pte_free_fast(pte_t *pte)
-{
-    if ( !QUICKLIST_FULL(pte_quicklist) ) {
-        *(pte_quicklist++) = (unsigned long)pte;
-        pgtable_cache_size++;
-    } else
-        pte_free_slow(pte);
-}
-
-#define pte_free(pte)          pte_free_fast(pte)
-#define pgd_alloc(mm)          get_pgd_fast()
-#define pgd_free(pgd)          free_pgd_fast(pgd)
-
-#define pmd_alloc_one_fast(mm, addr)   ({ BUG(); ((pmd_t *)1); })
-#define pmd_alloc_one(mm, addr)                ({ BUG(); ((pmd_t *)2); })
-#define pmd_free_slow(x)               do { } while (0)
-#define pmd_free_fast(x)               do { } while (0)
-#define pmd_free(x)                    do { } while (0)
-#define pgd_populate(mm, pmd, pte)     BUG()
-
-extern int do_check_pgt_cache(int, int);
-
-/*
- *  - flush_tlb() flushes the current mm struct TLBs
- *  - flush_tlb_all() flushes all processes TLBs
- *  - flush_tlb_mm(mm) flushes the specified mm context TLB's
- *  - flush_tlb_page(vma, vmaddr) flushes one page
- *  - flush_tlb_range(mm, start, end) flushes a range of pages
- *  - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
- */
-
-#define flush_tlb() __flush_tlb()
-#define flush_tlb_all() __flush_tlb_all()
-#define local_flush_tlb() __flush_tlb()
-
-static inline void flush_tlb_mm(struct mm_struct *mm)
-{
-    if ( mm == current->active_mm ) queue_tlb_flush();
-    XENO_flush_page_update_queue();
-}
-
-static inline void flush_tlb_page(struct vm_area_struct *vma,
-                                  unsigned long addr)
-{
-    if ( vma->vm_mm == current->active_mm ) queue_invlpg(addr);
-    XENO_flush_page_update_queue();
-}
-
-static inline void flush_tlb_range(struct mm_struct *mm,
-                                   unsigned long start, unsigned long end)
-{
-    if ( mm == current->active_mm ) queue_tlb_flush();
-    XENO_flush_page_update_queue();
-}
-
-static inline void flush_tlb_pgtables(struct mm_struct *mm,
-                                     unsigned long start, unsigned long end)
-{
-    /* i386 does not keep any page table caches in TLB */
-    XENO_flush_page_update_queue();
-}
-
-#endif /* _I386_PGALLOC_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-2level.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-2level.h
deleted file mode 100644 (file)
index 735ac99..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef _I386_PGTABLE_2LEVEL_H
-#define _I386_PGTABLE_2LEVEL_H
-
-/*
- * traditional i386 two-level paging structure:
- */
-
-#define PGDIR_SHIFT    22
-#define PTRS_PER_PGD   1024
-
-/*
- * the i386 is two-level, so we don't really have any
- * PMD directory physically.
- */
-#define PMD_SHIFT      22
-#define PTRS_PER_PMD   1
-
-#define PTRS_PER_PTE   1024
-
-#define pte_ERROR(e) \
-       printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
-#define pmd_ERROR(e) \
-       printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e))
-#define pgd_ERROR(e) \
-       printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
-
-/*
- * The "pgd_xxx()" functions here are trivial for a folded two-level
- * setup: the pgd is never bad, and a pmd always exists (as it's folded
- * into the pgd entry)
- */
-static inline int pgd_none(pgd_t pgd)          { return 0; }
-static inline int pgd_bad(pgd_t pgd)           { return 0; }
-static inline int pgd_present(pgd_t pgd)       { return 1; }
-#define pgd_clear(xp)                          do { } while (0)
-
-#define set_pte(pteptr, pteval) queue_l1_entry_update(__pa(pteptr), (pteval).pte_low)
-#define set_pmd(pmdptr, pmdval) queue_l2_entry_update(__pa(pmdptr), (pmdval).pmd)
-#define set_pgd(pgdptr, pgdval) ((void)0)
-
-#define pgd_page(pgd) \
-((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-
-static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
-{
-       return (pmd_t *) dir;
-}
-
-/*
- * A note on implementation of this atomic 'get-and-clear' operation.
- * This is actually very simple because XenoLinux can only run on a single
- * processor. Therefore, we cannot race other processors setting the 'accessed'
- * or 'dirty' bits on a page-table entry.
- * Even if pages are shared between domains, that is not a problem because
- * each domain will have separate page tables, with their own versions of
- * accessed & dirty state.
- */
-static inline pte_t ptep_get_and_clear(pte_t *xp)
-{
-    pte_t pte = *xp;
-    queue_l1_entry_update(__pa(xp), 0);
-    return pte;
-}
-
-#define pte_same(a, b)         ((a).pte_low == (b).pte_low)
-#define pte_page(x)            (mem_map+((unsigned long)((pte_val(x) >> PAGE_SHIFT))))
-#define pte_none(x)            (!(x).pte_low)
-#define __mk_pte(page_nr,pgprot) __pte(((page_nr) << PAGE_SHIFT) | pgprot_val(pgprot))
-
-#endif /* _I386_PGTABLE_2LEVEL_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-3level.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable-3level.h
deleted file mode 100644 (file)
index 22c69d2..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _I386_PGTABLE_3LEVEL_H
-#define _I386_PGTABLE_3LEVEL_H
-
-#error "PAE unsupported"
-
-/*
- * Intel Physical Address Extension (PAE) Mode - three-level page
- * tables on PPro+ CPUs.
- *
- * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
- */
-
-/*
- * PGDIR_SHIFT determines what a top-level page table entry can map
- */
-#define PGDIR_SHIFT    30
-#define PTRS_PER_PGD   4
-
-/*
- * PMD_SHIFT determines the size of the area a middle-level
- * page table can map
- */
-#define PMD_SHIFT      21
-#define PTRS_PER_PMD   512
-
-/*
- * entries per page directory level
- */
-#define PTRS_PER_PTE   512
-
-#define pte_ERROR(e) \
-       printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, &(e), (e).pte_high, (e).pte_low)
-#define pmd_ERROR(e) \
-       printk("%s:%d: bad pmd %p(%016Lx).\n", __FILE__, __LINE__, &(e), pmd_val(e))
-#define pgd_ERROR(e) \
-       printk("%s:%d: bad pgd %p(%016Lx).\n", __FILE__, __LINE__, &(e), pgd_val(e))
-
-static inline int pgd_none(pgd_t pgd)          { return 0; }
-static inline int pgd_bad(pgd_t pgd)           { return 0; }
-static inline int pgd_present(pgd_t pgd)       { return 1; }
-
-/* Rules for using set_pte: the pte being assigned *must* be
- * either not present or in a state where the hardware will
- * not attempt to update the pte.  In places where this is
- * not possible, use pte_get_and_clear to obtain the old pte
- * value and then use set_pte to update it.  -ben
- */
-static inline void set_pte(pte_t *ptep, pte_t pte)
-{
-       ptep->pte_high = pte.pte_high;
-       smp_wmb();
-       ptep->pte_low = pte.pte_low;
-}
-#define set_pmd(pmdptr,pmdval) \
-               set_64bit((unsigned long long *)(pmdptr),pmd_val(pmdval))
-#define set_pgd(pgdptr,pgdval) \
-               set_64bit((unsigned long long *)(pgdptr),pgd_val(pgdval))
-
-/*
- * Pentium-II erratum A13: in PAE mode we explicitly have to flush
- * the TLB via cr3 if the top-level pgd is changed...
- * We do not let the generic code free and clear pgd entries due to
- * this erratum.
- */
-static inline void pgd_clear (pgd_t * pgd) { }
-
-#define pgd_page(pgd) \
-((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-
-/* Find an entry in the second-level page table.. */
-#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
-                       __pmd_offset(address))
-
-static inline pte_t ptep_get_and_clear(pte_t *ptep)
-{
-       pte_t res;
-
-       /* xchg acts as a barrier before the setting of the high bits */
-       res.pte_low = xchg(&ptep->pte_low, 0);
-       res.pte_high = ptep->pte_high;
-       ptep->pte_high = 0;
-
-       return res;
-}
-
-static inline int pte_same(pte_t a, pte_t b)
-{
-       return a.pte_low == b.pte_low && a.pte_high == b.pte_high;
-}
-
-#define pte_page(x)    (mem_map+(((x).pte_low >> PAGE_SHIFT) | ((x).pte_high << (32 - PAGE_SHIFT))))
-#define pte_none(x)    (!(x).pte_low && !(x).pte_high)
-
-static inline pte_t __mk_pte(unsigned long page_nr, pgprot_t pgprot)
-{
-       pte_t pte;
-
-       pte.pte_high = page_nr >> (32 - PAGE_SHIFT);
-       pte.pte_low = (page_nr << PAGE_SHIFT) | pgprot_val(pgprot);
-       return pte;
-}
-
-#endif /* _I386_PGTABLE_3LEVEL_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/pgtable.h
deleted file mode 100644 (file)
index 5c3d46e..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-#ifndef _I386_PGTABLE_H
-#define _I386_PGTABLE_H
-
-#include <linux/config.h>
-
-#define HAVE_ARCH_UNMAPPED_AREA
-
-/*
- * The Linux memory management assumes a three-level page table setup. On
- * the i386, we use that, but "fold" the mid level into the top-level page
- * table, so that we physically have the same two-level page table as the
- * i386 mmu expects.
- *
- * This file contains the functions and defines necessary to modify and use
- * the i386 page table tree.
- */
-#ifndef __ASSEMBLY__
-#include <asm/processor.h>
-#include <asm/hypervisor.h>
-#include <linux/threads.h>
-#include <asm/fixmap.h>
-
-#ifndef _I386_BITOPS_H
-#include <asm/bitops.h>
-#endif
-
-#define swapper_pg_dir 0
-extern void paging_init(void);
-
-/* Caches aren't brain-dead on the intel. */
-#define flush_cache_all()                      do { } while (0)
-#define flush_cache_mm(mm)                     do { } while (0)
-#define flush_cache_range(mm, start, end)      do { } while (0)
-#define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
-#define flush_dcache_page(page)                        do { } while (0)
-#define flush_icache_range(start, end)         do { } while (0)
-#define flush_icache_page(vma,pg)              do { } while (0)
-
-extern unsigned long pgkern_mask;
-
-#define __flush_tlb() ({ queue_tlb_flush(); XENO_flush_page_update_queue(); })
-#define __flush_tlb_global() __flush_tlb()
-#define __flush_tlb_all() __flush_tlb_global()
-#define __flush_tlb_one(addr) ({ queue_invlpg(addr); XENO_flush_page_update_queue(); })
-
-/*
- * ZERO_PAGE is a global shared page that is always zero: used
- * for zero-mapped memory areas etc..
- */
-extern unsigned long empty_zero_page[1024];
-#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
-
-#endif /* !__ASSEMBLY__ */
-
-/*
- * The Linux x86 paging architecture is 'compile-time dual-mode', it
- * implements both the traditional 2-level x86 page tables and the
- * newer 3-level PAE-mode page tables.
- */
-#ifndef __ASSEMBLY__
-#if CONFIG_X86_PAE
-# include <asm/pgtable-3level.h>
-
-/*
- * Need to initialise the X86 PAE caches
- */
-extern void pgtable_cache_init(void);
-
-#else
-# include <asm/pgtable-2level.h>
-
-/*
- * No page table caches to initialise
- */
-#define pgtable_cache_init()   do { } while (0)
-
-#endif
-#endif
-
-#define PMD_SIZE       (1UL << PMD_SHIFT)
-#define PMD_MASK       (~(PMD_SIZE-1))
-#define PGDIR_SIZE     (1UL << PGDIR_SHIFT)
-#define PGDIR_MASK     (~(PGDIR_SIZE-1))
-
-#define USER_PTRS_PER_PGD      (TASK_SIZE/PGDIR_SIZE)
-#define FIRST_USER_PGD_NR      0
-
-#define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT)
-#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)
-
-#define TWOLEVEL_PGDIR_SHIFT   22
-#define BOOT_USER_PGD_PTRS (__PAGE_OFFSET >> TWOLEVEL_PGDIR_SHIFT)
-#define BOOT_KERNEL_PGD_PTRS (1024-BOOT_USER_PGD_PTRS)
-
-
-#ifndef __ASSEMBLY__
-/* 4MB is just a nice "safety zone". Also, we align to a fresh pde. */
-#define VMALLOC_OFFSET (4*1024*1024)
-#define VMALLOC_START  (((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & \
-                                               ~(VMALLOC_OFFSET-1))
-#define VMALLOC_VMADDR(x) ((unsigned long)(x))
-#define VMALLOC_END    (FIXADDR_START - 2*PAGE_SIZE)
-
-#define _PAGE_BIT_PRESENT      0
-#define _PAGE_BIT_RW           1
-#define _PAGE_BIT_USER         2
-#define _PAGE_BIT_PWT          3
-#define _PAGE_BIT_PCD          4
-#define _PAGE_BIT_ACCESSED     5
-#define _PAGE_BIT_DIRTY                6
-#define _PAGE_BIT_PSE          7       /* 4 MB (or 2MB) page, Pentium+, if present.. */
-#define _PAGE_BIT_GLOBAL       8       /* Global TLB entry PPro+ */
-
-#define _PAGE_PRESENT  0x001
-#define _PAGE_RW       0x002
-#define _PAGE_USER     0x004
-#define _PAGE_PWT      0x008
-#define _PAGE_PCD      0x010
-#define _PAGE_ACCESSED 0x020
-#define _PAGE_DIRTY    0x040
-#define _PAGE_PSE      0x080   /* 4 MB (or 2MB) page, Pentium+, if present.. */
-#define _PAGE_GLOBAL   0x100   /* Global TLB entry PPro+ */
-
-#define _PAGE_PROTNONE 0x080   /* If not present */
-
-#define _PAGE_TABLE    (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
-#define _KERNPG_TABLE  (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
-#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
-
-#define PAGE_NONE      __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
-#define PAGE_SHARED    __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
-#define PAGE_COPY      __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
-#define PAGE_READONLY  __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
-
-#define __PAGE_KERNEL \
-       (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
-#define __PAGE_KERNEL_NOCACHE \
-       (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_PCD | _PAGE_ACCESSED)
-#define __PAGE_KERNEL_RO \
-       (_PAGE_PRESENT | _PAGE_DIRTY | _PAGE_ACCESSED)
-
-#if 0
-#define MAKE_GLOBAL(x) __pgprot((x) | _PAGE_GLOBAL)
-#else
-#define MAKE_GLOBAL(x) __pgprot(x)
-#endif
-
-#define PAGE_KERNEL MAKE_GLOBAL(__PAGE_KERNEL)
-#define PAGE_KERNEL_RO MAKE_GLOBAL(__PAGE_KERNEL_RO)
-#define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE)
-
-/*
- * The i386 can't do page protection for execute, and considers that
- * the same are read. Also, write permissions imply read permissions.
- * This is the closest we can get..
- */
-#define __P000 PAGE_NONE
-#define __P001 PAGE_READONLY
-#define __P010 PAGE_COPY
-#define __P011 PAGE_COPY
-#define __P100 PAGE_READONLY
-#define __P101 PAGE_READONLY
-#define __P110 PAGE_COPY
-#define __P111 PAGE_COPY
-
-#define __S000 PAGE_NONE
-#define __S001 PAGE_READONLY
-#define __S010 PAGE_SHARED
-#define __S011 PAGE_SHARED
-#define __S100 PAGE_READONLY
-#define __S101 PAGE_READONLY
-#define __S110 PAGE_SHARED
-#define __S111 PAGE_SHARED
-
-#define pte_present(x) ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))
-#define pte_clear(xp)  queue_l1_entry_update(__pa(xp), 0)
-
-#define pmd_none(x)    (!(x).pmd)
-#define pmd_present(x) ((x).pmd & _PAGE_PRESENT)
-#define pmd_clear(xp)  do { set_pmd(xp, __pmd(0)); } while (0)
-#define        pmd_bad(x)      (((x).pmd & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
-
-/*
- * Permanent address of a page. Obviously must never be
- * called on a highmem page.
- */
-#define page_address(page) ((page)->virtual)
-#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT))
-
-/*
- * The following only work if pte_present() is true.
- * Undefined behaviour if not..
- */
-static inline int pte_read(pte_t pte)          { return (pte).pte_low & _PAGE_USER; }
-static inline int pte_exec(pte_t pte)          { return (pte).pte_low & _PAGE_USER; }
-static inline int pte_dirty(pte_t pte)         { return (pte).pte_low & _PAGE_DIRTY; }
-static inline int pte_young(pte_t pte)         { return (pte).pte_low & _PAGE_ACCESSED; }
-static inline int pte_write(pte_t pte)         { return (pte).pte_low & _PAGE_RW; }
-
-static inline pte_t pte_rdprotect(pte_t pte)   { (pte).pte_low &= ~_PAGE_USER; return pte; }
-static inline pte_t pte_exprotect(pte_t pte)   { (pte).pte_low &= ~_PAGE_USER; return pte; }
-static inline pte_t pte_mkclean(pte_t pte)     { (pte).pte_low &= ~_PAGE_DIRTY; return pte; }
-static inline pte_t pte_mkold(pte_t pte)       { (pte).pte_low &= ~_PAGE_ACCESSED; return pte; }
-static inline pte_t pte_wrprotect(pte_t pte)   { (pte).pte_low &= ~_PAGE_RW; return pte; }
-static inline pte_t pte_mkread(pte_t pte)      { (pte).pte_low |= _PAGE_USER; return pte; }
-static inline pte_t pte_mkexec(pte_t pte)      { (pte).pte_low |= _PAGE_USER; return pte; }
-static inline pte_t pte_mkdirty(pte_t pte)     { (pte).pte_low |= _PAGE_DIRTY; return pte; }
-static inline pte_t pte_mkyoung(pte_t pte)     { (pte).pte_low |= _PAGE_ACCESSED; return pte; }
-static inline pte_t pte_mkwrite(pte_t pte)     { (pte).pte_low |= _PAGE_RW; return pte; }
-
-static inline int ptep_test_and_clear_dirty(pte_t *ptep)
-{
-    unsigned long pteval = *(unsigned long *)ptep;
-    int ret = pteval & _PAGE_DIRTY;
-    if ( ret ) queue_l1_entry_update(__pa(ptep), pteval & ~_PAGE_DIRTY);
-    return ret;
-}
-static inline  int ptep_test_and_clear_young(pte_t *ptep)
-{
-    unsigned long pteval = *(unsigned long *)ptep;
-    int ret = pteval & _PAGE_ACCESSED;
-    if ( ret ) queue_l1_entry_update(__pa(ptep), pteval & ~_PAGE_ACCESSED);
-    return ret;
-}
-static inline void ptep_set_wrprotect(pte_t *ptep)
-{
-    unsigned long pteval = *(unsigned long *)ptep;
-    if ( (pteval & _PAGE_RW) )
-        queue_l1_entry_update(__pa(ptep), pteval & ~_PAGE_RW);
-}
-static inline void ptep_mkdirty(pte_t *ptep)
-{
-    unsigned long pteval = *(unsigned long *)ptep;
-    if ( !(pteval & _PAGE_DIRTY) )
-        queue_l1_entry_update(__pa(ptep), pteval | _PAGE_DIRTY);
-}
-
-/*
- * Conversion functions: convert a page and protection to a page entry,
- * and a page entry and page directory to the page they refer to.
- */
-
-#define mk_pte(page, pgprot)   __mk_pte((page) - mem_map, (pgprot))
-
-/* This takes a physical page address that is used by the remapping functions */
-#define mk_pte_phys(physpage, pgprot)  __mk_pte((physpage) >> PAGE_SHIFT, pgprot)
-
-static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
-{
-       pte.pte_low &= _PAGE_CHG_MASK;
-       pte.pte_low |= pgprot_val(newprot);
-       return pte;
-}
-
-#define page_pte(page) page_pte_prot(page, __pgprot(0))
-
-#define pmd_page(pmd) \
-((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
-
-/* to find an entry in a page-table-directory. */
-#define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
-
-#define __pgd_offset(address) pgd_index(address)
-
-#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
-
-/* to find an entry in a kernel page-table-directory */
-#define pgd_offset_k(address) pgd_offset(&init_mm, address)
-
-#define __pmd_offset(address) \
-               (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
-
-/* Find an entry in the third-level page table.. */
-#define __pte_offset(address) \
-                ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
-#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + \
-                       __pte_offset(address))
-
-/*
- * The i386 doesn't have any external MMU info: the kernel page
- * tables contain all the necessary information.
- */
-#define update_mmu_cache(vma,address,pte) do { } while (0)
-
-/* Encode and de-code a swap entry */
-#define SWP_TYPE(x)                    (((x).val >> 1) & 0x3f)
-#define SWP_OFFSET(x)                  ((x).val >> 8)
-#define SWP_ENTRY(type, offset)                ((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
-#define pte_to_swp_entry(pte)          ((swp_entry_t) { (pte).pte_low })
-#define swp_entry_to_pte(x)            ((pte_t) { (x).val })
-
-#endif /* !__ASSEMBLY__ */
-
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-#define PageSkip(page)         (0)
-#define kern_addr_valid(addr)  (1)
-
-#define io_remap_page_range remap_page_range
-
-#endif /* _I386_PGTABLE_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/poll.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/poll.h
deleted file mode 100644 (file)
index e5feda7..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef __i386_POLL_H
-#define __i386_POLL_H
-
-/* These are specified by iBCS2 */
-#define POLLIN         0x0001
-#define POLLPRI                0x0002
-#define POLLOUT                0x0004
-#define POLLERR                0x0008
-#define POLLHUP                0x0010
-#define POLLNVAL       0x0020
-
-/* The rest seem to be more-or-less nonstandard. Check them! */
-#define POLLRDNORM     0x0040
-#define POLLRDBAND     0x0080
-#define POLLWRNORM     0x0100
-#define POLLWRBAND     0x0200
-#define POLLMSG                0x0400
-
-struct pollfd {
-       int fd;
-       short events;
-       short revents;
-};
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/posix_types.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/posix_types.h
deleted file mode 100644 (file)
index 5529f32..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef __ARCH_I386_POSIX_TYPES_H
-#define __ARCH_I386_POSIX_TYPES_H
-
-/*
- * This file is generally used by user-level software, so you need to
- * be a little careful about namespace pollution etc.  Also, we cannot
- * assume GCC is being used.
- */
-
-typedef unsigned short __kernel_dev_t;
-typedef unsigned long  __kernel_ino_t;
-typedef unsigned short __kernel_mode_t;
-typedef unsigned short __kernel_nlink_t;
-typedef long           __kernel_off_t;
-typedef int            __kernel_pid_t;
-typedef unsigned short __kernel_ipc_pid_t;
-typedef unsigned short __kernel_uid_t;
-typedef unsigned short __kernel_gid_t;
-typedef unsigned int   __kernel_size_t;
-typedef int            __kernel_ssize_t;
-typedef int            __kernel_ptrdiff_t;
-typedef long           __kernel_time_t;
-typedef long           __kernel_suseconds_t;
-typedef long           __kernel_clock_t;
-typedef int            __kernel_daddr_t;
-typedef char *         __kernel_caddr_t;
-typedef unsigned short __kernel_uid16_t;
-typedef unsigned short __kernel_gid16_t;
-typedef unsigned int   __kernel_uid32_t;
-typedef unsigned int   __kernel_gid32_t;
-
-typedef unsigned short __kernel_old_uid_t;
-typedef unsigned short __kernel_old_gid_t;
-
-#ifdef __GNUC__
-typedef long long      __kernel_loff_t;
-#endif
-
-typedef struct {
-#if defined(__KERNEL__) || defined(__USE_ALL)
-       int     val[2];
-#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
-       int     __val[2];
-#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
-} __kernel_fsid_t;
-
-#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
-
-#undef __FD_SET
-#define __FD_SET(fd,fdsetp) \
-               __asm__ __volatile__("btsl %1,%0": \
-                       "=m" (*(__kernel_fd_set *) (fdsetp)):"r" ((int) (fd)))
-
-#undef __FD_CLR
-#define __FD_CLR(fd,fdsetp) \
-               __asm__ __volatile__("btrl %1,%0": \
-                       "=m" (*(__kernel_fd_set *) (fdsetp)):"r" ((int) (fd)))
-
-#undef __FD_ISSET
-#define __FD_ISSET(fd,fdsetp) (__extension__ ({ \
-               unsigned char __result; \
-               __asm__ __volatile__("btl %1,%2 ; setb %0" \
-                       :"=q" (__result) :"r" ((int) (fd)), \
-                       "m" (*(__kernel_fd_set *) (fdsetp))); \
-               __result; }))
-
-#undef __FD_ZERO
-#define __FD_ZERO(fdsetp) \
-do { \
-       int __d0, __d1; \
-       __asm__ __volatile__("cld ; rep ; stosl" \
-                       :"=m" (*(__kernel_fd_set *) (fdsetp)), \
-                         "=&c" (__d0), "=&D" (__d1) \
-                       :"a" (0), "1" (__FDSET_LONGS), \
-                       "2" ((__kernel_fd_set *) (fdsetp)) : "memory"); \
-} while (0)
-
-#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/processor.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/processor.h
deleted file mode 100644 (file)
index 3e65e19..0000000
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * include/asm-i386/processor.h
- *
- * Copyright (C) 1994 Linus Torvalds
- */
-
-#ifndef __ASM_I386_PROCESSOR_H
-#define __ASM_I386_PROCESSOR_H
-
-#include <asm/math_emu.h>
-#include <asm/segment.h>
-#include <asm/page.h>
-#include <asm/types.h>
-#include <asm/sigcontext.h>
-#include <asm/cpufeature.h>
-#include <linux/cache.h>
-#include <linux/config.h>
-#include <linux/threads.h>
-
-/*
- * Default implementation of macro that returns current
- * instruction pointer ("program counter").
- */
-#define current_text_addr() ({ void *pc; __asm__("movl $1f,%0\n1:":"=g" (pc)); pc; })
-
-/*
- *  CPU type and hardware bug flags. Kept separately for each CPU.
- *  Members of this structure are referenced in head.S, so think twice
- *  before touching them. [mj]
- */
-
-struct cpuinfo_x86 {
-       __u8    x86;            /* CPU family */
-       __u8    x86_vendor;     /* CPU vendor */
-       __u8    x86_model;
-       __u8    x86_mask;
-       char    wp_works_ok;    /* It doesn't on 386's */
-       char    hlt_works_ok;   /* Problems on some 486Dx4's and old 386's */
-       char    hard_math;
-       char    rfu;
-               int     cpuid_level;    /* Maximum supported CPUID level, -1=no CPUID */
-       __u32   x86_capability[NCAPINTS];
-       char    x86_vendor_id[16];
-       char    x86_model_id[64];
-       int     x86_cache_size;  /* in KB - valid for CPUS which support this
-                                   call  */
-       int     fdiv_bug;
-       int     f00f_bug;
-       int     coma_bug;
-       unsigned long loops_per_jiffy;
-       unsigned long *pgd_quick;
-       unsigned long *pmd_quick;
-       unsigned long *pte_quick;
-       unsigned long pgtable_cache_sz;
-} __attribute__((__aligned__(SMP_CACHE_BYTES)));
-
-#define X86_VENDOR_INTEL 0
-#define X86_VENDOR_CYRIX 1
-#define X86_VENDOR_AMD 2
-#define X86_VENDOR_UMC 3
-#define X86_VENDOR_NEXGEN 4
-#define X86_VENDOR_CENTAUR 5
-#define X86_VENDOR_RISE 6
-#define X86_VENDOR_TRANSMETA 7
-#define X86_VENDOR_UNKNOWN 0xff
-
-/*
- * capabilities of CPUs
- */
-
-extern struct cpuinfo_x86 boot_cpu_data;
-extern struct tss_struct init_tss[NR_CPUS];
-
-#ifdef CONFIG_SMP
-extern struct cpuinfo_x86 cpu_data[];
-#define current_cpu_data cpu_data[smp_processor_id()]
-#else
-#define cpu_data (&boot_cpu_data)
-#define current_cpu_data boot_cpu_data
-#endif
-
-#define cpu_has_pge    (test_bit(X86_FEATURE_PGE,  boot_cpu_data.x86_capability))
-#define cpu_has_pse    (test_bit(X86_FEATURE_PSE,  boot_cpu_data.x86_capability))
-#define cpu_has_pae    (test_bit(X86_FEATURE_PAE,  boot_cpu_data.x86_capability))
-#define cpu_has_tsc    (test_bit(X86_FEATURE_TSC,  boot_cpu_data.x86_capability))
-#define cpu_has_de     (test_bit(X86_FEATURE_DE,   boot_cpu_data.x86_capability))
-#define cpu_has_vme    (test_bit(X86_FEATURE_VME,  boot_cpu_data.x86_capability))
-#define cpu_has_fxsr   (test_bit(X86_FEATURE_FXSR, boot_cpu_data.x86_capability))
-#define cpu_has_xmm    (test_bit(X86_FEATURE_XMM,  boot_cpu_data.x86_capability))
-#define cpu_has_fpu    (test_bit(X86_FEATURE_FPU,  boot_cpu_data.x86_capability))
-#define cpu_has_apic   (test_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability))
-
-extern char ignore_irq13;
-
-extern void identify_cpu(struct cpuinfo_x86 *);
-extern void print_cpu_info(struct cpuinfo_x86 *);
-
-/*
- * EFLAGS bits
- */
-#define X86_EFLAGS_CF  0x00000001 /* Carry Flag */
-#define X86_EFLAGS_PF  0x00000004 /* Parity Flag */
-#define X86_EFLAGS_AF  0x00000010 /* Auxillary carry Flag */
-#define X86_EFLAGS_ZF  0x00000040 /* Zero Flag */
-#define X86_EFLAGS_SF  0x00000080 /* Sign Flag */
-#define X86_EFLAGS_TF  0x00000100 /* Trap Flag */
-#define X86_EFLAGS_IF  0x00000200 /* Interrupt Flag */
-#define X86_EFLAGS_DF  0x00000400 /* Direction Flag */
-#define X86_EFLAGS_OF  0x00000800 /* Overflow Flag */
-#define X86_EFLAGS_IOPL        0x00003000 /* IOPL mask */
-#define X86_EFLAGS_NT  0x00004000 /* Nested Task */
-#define X86_EFLAGS_RF  0x00010000 /* Resume Flag */
-#define X86_EFLAGS_VM  0x00020000 /* Virtual Mode */
-#define X86_EFLAGS_AC  0x00040000 /* Alignment Check */
-#define X86_EFLAGS_VIF 0x00080000 /* Virtual Interrupt Flag */
-#define X86_EFLAGS_VIP 0x00100000 /* Virtual Interrupt Pending */
-#define X86_EFLAGS_ID  0x00200000 /* CPUID detection flag */
-
-/*
- * Generic CPUID function
- */
-static inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
-{
-       __asm__("cpuid"
-               : "=a" (*eax),
-                 "=b" (*ebx),
-                 "=c" (*ecx),
-                 "=d" (*edx)
-               : "0" (op));
-}
-
-/*
- * CPUID functions returning a single datum
- */
-static inline unsigned int cpuid_eax(unsigned int op)
-{
-       unsigned int eax;
-
-       __asm__("cpuid"
-               : "=a" (eax)
-               : "0" (op)
-               : "bx", "cx", "dx");
-       return eax;
-}
-static inline unsigned int cpuid_ebx(unsigned int op)
-{
-       unsigned int eax, ebx;
-
-       __asm__("cpuid"
-               : "=a" (eax), "=b" (ebx)
-               : "0" (op)
-               : "cx", "dx" );
-       return ebx;
-}
-static inline unsigned int cpuid_ecx(unsigned int op)
-{
-       unsigned int eax, ecx;
-
-       __asm__("cpuid"
-               : "=a" (eax), "=c" (ecx)
-               : "0" (op)
-               : "bx", "dx" );
-       return ecx;
-}
-static inline unsigned int cpuid_edx(unsigned int op)
-{
-       unsigned int eax, edx;
-
-       __asm__("cpuid"
-               : "=a" (eax), "=d" (edx)
-               : "0" (op)
-               : "bx", "cx");
-       return edx;
-}
-
-/*
- * Intel CPU features in CR4
- */
-#define X86_CR4_VME            0x0001  /* enable vm86 extensions */
-#define X86_CR4_PVI            0x0002  /* virtual interrupts flag enable */
-#define X86_CR4_TSD            0x0004  /* disable time stamp at ipl 3 */
-#define X86_CR4_DE             0x0008  /* enable debugging extensions */
-#define X86_CR4_PSE            0x0010  /* enable page size extensions */
-#define X86_CR4_PAE            0x0020  /* enable physical address extensions */
-#define X86_CR4_MCE            0x0040  /* Machine check enable */
-#define X86_CR4_PGE            0x0080  /* enable global pages */
-#define X86_CR4_PCE            0x0100  /* enable performance counters at ipl 3 */
-#define X86_CR4_OSFXSR         0x0200  /* enable fast FPU save and restore */
-#define X86_CR4_OSXMMEXCPT     0x0400  /* enable unmasked SSE exceptions */
-
-extern unsigned long mmu_cr4_features;
-
-#include <asm/hypervisor.h>
-
-static inline void set_in_cr4 (unsigned long mask)
-{
-    HYPERVISOR_console_write("No set_in_cr4", 13);
-}
-
-static inline void clear_in_cr4 (unsigned long mask)
-{
-    HYPERVISOR_console_write("No clear_in_cr4", 15);
-}
-
-/*
- *      Cyrix CPU configuration register indexes
- */
-#define CX86_CCR0 0xc0
-#define CX86_CCR1 0xc1
-#define CX86_CCR2 0xc2
-#define CX86_CCR3 0xc3
-#define CX86_CCR4 0xe8
-#define CX86_CCR5 0xe9
-#define CX86_CCR6 0xea
-#define CX86_CCR7 0xeb
-#define CX86_DIR0 0xfe
-#define CX86_DIR1 0xff
-#define CX86_ARR_BASE 0xc4
-#define CX86_RCR_BASE 0xdc
-
-/*
- *      Cyrix CPU indexed register access macros
- */
-
-#define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); })
-
-#define setCx86(reg, data) do { \
-       outb((reg), 0x22); \
-       outb((data), 0x23); \
-} while (0)
-
-/*
- * Bus types (default is ISA, but people can check others with these..)
- */
-#ifdef CONFIG_EISA
-extern int EISA_bus;
-#else
-#define EISA_bus (0)
-#endif
-extern int MCA_bus;
-
-/* from system description table in BIOS.  Mostly for MCA use, but
-others may find it useful. */
-extern unsigned int machine_id;
-extern unsigned int machine_submodel_id;
-extern unsigned int BIOS_revision;
-extern unsigned int mca_pentium_flag;
-
-/*
- * User space process size: 3GB (default).
- */
-#define TASK_SIZE      (PAGE_OFFSET)
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE     (TASK_SIZE / 3)
-
-/*
- * Size of io_bitmap in longwords: 32 is ports 0-0x3ff.
- */
-#define IO_BITMAP_SIZE 32
-#define IO_BITMAP_OFFSET offsetof(struct tss_struct,io_bitmap)
-#define INVALID_IO_BITMAP_OFFSET 0x8000
-
-struct i387_fsave_struct {
-       long    cwd;
-       long    swd;
-       long    twd;
-       long    fip;
-       long    fcs;
-       long    foo;
-       long    fos;
-       long    st_space[20];   /* 8*10 bytes for each FP-reg = 80 bytes */
-       long    status;         /* software status information */
-};
-
-struct i387_fxsave_struct {
-       unsigned short  cwd;
-       unsigned short  swd;
-       unsigned short  twd;
-       unsigned short  fop;
-       long    fip;
-       long    fcs;
-       long    foo;
-       long    fos;
-       long    mxcsr;
-       long    reserved;
-       long    st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
-       long    xmm_space[32];  /* 8*16 bytes for each XMM-reg = 128 bytes */
-       long    padding[56];
-} __attribute__ ((aligned (16)));
-
-struct i387_soft_struct {
-       long    cwd;
-       long    swd;
-       long    twd;
-       long    fip;
-       long    fcs;
-       long    foo;
-       long    fos;
-       long    st_space[20];   /* 8*10 bytes for each FP-reg = 80 bytes */
-       unsigned char   ftop, changed, lookahead, no_update, rm, alimit;
-       struct info     *info;
-       unsigned long   entry_eip;
-};
-
-union i387_union {
-       struct i387_fsave_struct        fsave;
-       struct i387_fxsave_struct       fxsave;
-       struct i387_soft_struct soft;
-};
-
-typedef struct {
-       unsigned long seg;
-} mm_segment_t;
-
-struct tss_struct {
-       unsigned short  back_link,__blh;
-       unsigned long   esp0;
-       unsigned short  ss0,__ss0h;
-       unsigned long   esp1;
-       unsigned short  ss1,__ss1h;
-       unsigned long   esp2;
-       unsigned short  ss2,__ss2h;
-       unsigned long   __cr3;
-       unsigned long   eip;
-       unsigned long   eflags;
-       unsigned long   eax,ecx,edx,ebx;
-       unsigned long   esp;
-       unsigned long   ebp;
-       unsigned long   esi;
-       unsigned long   edi;
-       unsigned short  es, __esh;
-       unsigned short  cs, __csh;
-       unsigned short  ss, __ssh;
-       unsigned short  ds, __dsh;
-       unsigned short  fs, __fsh;
-       unsigned short  gs, __gsh;
-       unsigned short  ldt, __ldth;
-       unsigned short  trace, bitmap;
-       unsigned long   io_bitmap[IO_BITMAP_SIZE+1];
-       /*
-        * pads the TSS to be cacheline-aligned (size is 0x100)
-        */
-       unsigned long __cacheline_filler[5];
-};
-
-struct thread_struct {
-       unsigned long   esp0;
-       unsigned long   eip;
-       unsigned long   esp;
-       unsigned long   fs;
-       unsigned long   gs;
-/* Hardware debugging registers */
-       unsigned long   debugreg[8];  /* %%db0-7 debug registers */
-/* fault info */
-       unsigned long   cr2, trap_no, error_code;
-/* floating point info */
-       union i387_union        i387;
-/* virtual 86 mode info */
-       struct vm86_struct      * vm86_info;
-       unsigned long           screen_bitmap;
-       unsigned long           v86flags, v86mask, v86mode, saved_esp0;
-};
-
-#define INIT_THREAD  { 0 }
-
-#define INIT_TSS  {                                            \
-       0,0, /* back_link, __blh */                             \
-       sizeof(init_stack) + (long) &init_stack, /* esp0 */     \
-       __KERNEL_DS, 0, /* ss0 */                               \
-       0,0,0,0,0,0, /* stack1, stack2 */                       \
-       0, /* cr3 */                                            \
-       0,0, /* eip,eflags */                                   \
-       0,0,0,0, /* eax,ecx,edx,ebx */                          \
-       0,0,0,0, /* esp,ebp,esi,edi */                          \
-       0,0,0,0,0,0, /* es,cs,ss */                             \
-       0,0,0,0,0,0, /* ds,fs,gs */                             \
-       __LDT(0),0, /* ldt */                                   \
-       0, INVALID_IO_BITMAP_OFFSET, /* tace, bitmap */         \
-       {~0, } /* ioperm */                                     \
-}
-
-#define start_thread(regs, new_eip, new_esp) do {              \
-       __asm__("movl %0,%%fs ; movl %0,%%gs": :"r" (0));       \
-       set_fs(USER_DS);                                        \
-       regs->xds = __USER_DS;                                  \
-       regs->xes = __USER_DS;                                  \
-       regs->xss = __USER_DS;                                  \
-       regs->xcs = __USER_CS;                                  \
-       regs->eip = new_eip;                                    \
-       regs->esp = new_esp;                                    \
-} while (0)
-
-/* Forward declaration, a strange C thing */
-struct task_struct;
-struct mm_struct;
-
-/* Free all resources held by a thread. */
-extern void release_thread(struct task_struct *);
-/*
- * create a kernel thread without removing it from tasklists
- */
-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
-
-/* Copy and release all segment info associated with a VM */
-extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
-extern void release_segments(struct mm_struct * mm);
-
-/*
- * Return saved PC of a blocked thread.
- */
-static inline unsigned long thread_saved_pc(struct thread_struct *t)
-{
-       return ((unsigned long *)t->esp)[3];
-}
-
-unsigned long get_wchan(struct task_struct *p);
-#define KSTK_EIP(tsk)  (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
-#define KSTK_ESP(tsk)  (((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
-
-#define THREAD_SIZE (2*PAGE_SIZE)
-#define alloc_task_struct() ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
-#define free_task_struct(p) free_pages((unsigned long) (p), 1)
-#define get_task_struct(tsk)      atomic_inc(&virt_to_page(tsk)->count)
-
-#define init_task      (init_task_union.task)
-#define init_stack     (init_task_union.stack)
-
-struct microcode {
-       unsigned int hdrver;
-       unsigned int rev;
-       unsigned int date;
-       unsigned int sig;
-       unsigned int cksum;
-       unsigned int ldrver;
-       unsigned int pf;
-       unsigned int reserved[5];
-       unsigned int bits[500];
-};
-
-/* '6' because it used to be for P6 only (but now covers Pentium 4 as well) */
-#define MICROCODE_IOCFREE      _IO('6',0)
-
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static inline void rep_nop(void)
-{
-       __asm__ __volatile__("rep;nop");
-}
-
-#define cpu_relax()    rep_nop()
-
-/* Prefetch instructions for Pentium III and AMD Athlon */
-#ifdef         CONFIG_MPENTIUMIII
-
-#define ARCH_HAS_PREFETCH
-extern inline void prefetch(const void *x)
-{
-       __asm__ __volatile__ ("prefetchnta (%0)" : : "r"(x));
-}
-
-#elif CONFIG_X86_USE_3DNOW
-
-#define ARCH_HAS_PREFETCH
-#define ARCH_HAS_PREFETCHW
-#define ARCH_HAS_SPINLOCK_PREFETCH
-
-extern inline void prefetch(const void *x)
-{
-        __asm__ __volatile__ ("prefetch (%0)" : : "r"(x));
-}
-
-extern inline void prefetchw(const void *x)
-{
-        __asm__ __volatile__ ("prefetchw (%0)" : : "r"(x));
-}
-#define spin_lock_prefetch(x)  prefetchw(x)
-
-#endif
-
-#define TF_MASK 0x100
-
-#endif /* __ASM_I386_PROCESSOR_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ptrace.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ptrace.h
deleted file mode 100644 (file)
index f6d95dc..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef _I386_PTRACE_H
-#define _I386_PTRACE_H
-
-#define EBX 0
-#define ECX 1
-#define EDX 2
-#define ESI 3
-#define EDI 4
-#define EBP 5
-#define EAX 6
-#define DS 7
-#define ES 8
-#define FS 9
-#define GS 10
-#define ORIG_EAX 11
-#define EIP 12
-#define CS  13
-#define EFL 14
-#define UESP 15
-#define SS   16
-#define FRAME_SIZE 17
-
-/* this struct defines the way the registers are stored on the 
-   stack during a system call. */
-
-struct pt_regs {
-       long ebx;
-       long ecx;
-       long edx;
-       long esi;
-       long edi;
-       long ebp;
-       long eax;
-       int  xds;
-       int  xes;
-       long orig_eax;
-       long eip;
-       int  xcs;
-       long eflags;
-       long esp;
-       int  xss;
-};
-
-/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
-#define PTRACE_GETREGS            12
-#define PTRACE_SETREGS            13
-#define PTRACE_GETFPREGS          14
-#define PTRACE_SETFPREGS          15
-#define PTRACE_GETFPXREGS         18
-#define PTRACE_SETFPXREGS         19
-
-#define PTRACE_SETOPTIONS         21
-
-/* options set using PTRACE_SETOPTIONS */
-#define PTRACE_O_TRACESYSGOOD     0x00000001
-
-enum EFLAGS {
-        EF_CF   = 0x00000001,
-        EF_PF   = 0x00000004,
-        EF_AF   = 0x00000010,
-        EF_ZF   = 0x00000040,
-        EF_SF   = 0x00000080,
-        EF_TF   = 0x00000100,
-        EF_IE   = 0x00000200,
-        EF_DF   = 0x00000400,
-        EF_OF   = 0x00000800,
-        EF_IOPL = 0x00003000,
-        EF_IOPL_RING0 = 0x00000000,
-        EF_IOPL_RING1 = 0x00001000,
-        EF_IOPL_RING2 = 0x00002000,
-        EF_NT   = 0x00004000,   /* nested task */
-        EF_RF   = 0x00010000,   /* resume */
-        EF_VM   = 0x00020000,   /* virtual mode */
-        EF_AC   = 0x00040000,   /* alignment */
-        EF_VIF  = 0x00080000,   /* virtual interrupt */
-        EF_VIP  = 0x00100000,   /* virtual interrupt pending */
-        EF_ID   = 0x00200000,   /* id */
-};
-
-#ifdef __KERNEL__
-#define user_mode(regs) ((regs) && (3 & (regs)->xcs))
-#define instruction_pointer(regs) ((regs) ? (regs)->eip : NULL)
-extern void show_regs(struct pt_regs *);
-#endif
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/resource.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/resource.h
deleted file mode 100644 (file)
index e0da3ad..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef _I386_RESOURCE_H
-#define _I386_RESOURCE_H
-
-/*
- * Resource limits
- */
-
-#define RLIMIT_CPU     0               /* CPU time in ms */
-#define RLIMIT_FSIZE   1               /* Maximum filesize */
-#define RLIMIT_DATA    2               /* max data size */
-#define RLIMIT_STACK   3               /* max stack size */
-#define RLIMIT_CORE    4               /* max core file size */
-#define RLIMIT_RSS     5               /* max resident set size */
-#define RLIMIT_NPROC   6               /* max number of processes */
-#define RLIMIT_NOFILE  7               /* max number of open files */
-#define RLIMIT_MEMLOCK 8               /* max locked-in-memory address space */
-#define RLIMIT_AS      9               /* address space limit */
-#define RLIMIT_LOCKS   10              /* maximum file locks held */
-
-#define RLIM_NLIMITS   11
-
-/*
- * SuS says limits have to be unsigned.
- * Which makes a ton more sense anyway.
- */
-#define RLIM_INFINITY  (~0UL)
-
-#ifdef __KERNEL__
-
-#define INIT_RLIMITS                                   \
-{                                                      \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
-       {      _STK_LIM, RLIM_INFINITY },               \
-       {             0, RLIM_INFINITY },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
-       {             0,             0 },               \
-       {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
-        { RLIM_INFINITY, RLIM_INFINITY },              \
-}
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/rwlock.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/rwlock.h
deleted file mode 100644 (file)
index 9475419..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* include/asm-i386/rwlock.h
- *
- *     Helpers used by both rw spinlocks and rw semaphores.
- *
- *     Based in part on code from semaphore.h and
- *     spinlock.h Copyright 1996 Linus Torvalds.
- *
- *     Copyright 1999 Red Hat, Inc.
- *
- *     Written by Benjamin LaHaise.
- *
- *     This program is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License
- *     as published by the Free Software Foundation; either version
- *     2 of the License, or (at your option) any later version.
- */
-#ifndef _ASM_I386_RWLOCK_H
-#define _ASM_I386_RWLOCK_H
-
-#define RW_LOCK_BIAS            0x01000000
-#define RW_LOCK_BIAS_STR       "0x01000000"
-
-#define __build_read_lock_ptr(rw, helper)   \
-       asm volatile(LOCK "subl $1,(%0)\n\t" \
-                    "js 2f\n" \
-                    "1:\n" \
-                    ".section .text.lock,\"ax\"\n" \
-                    "2:\tcall " helper "\n\t" \
-                    "jmp 1b\n" \
-                    ".previous" \
-                    ::"a" (rw) : "memory")
-
-#define __build_read_lock_const(rw, helper)   \
-       asm volatile(LOCK "subl $1,%0\n\t" \
-                    "js 2f\n" \
-                    "1:\n" \
-                    ".section .text.lock,\"ax\"\n" \
-                    "2:\tpushl %%eax\n\t" \
-                    "leal %0,%%eax\n\t" \
-                    "call " helper "\n\t" \
-                    "popl %%eax\n\t" \
-                    "jmp 1b\n" \
-                    ".previous" \
-                    :"=m" (*(volatile int *)rw) : : "memory")
-
-#define __build_read_lock(rw, helper)  do { \
-                                               if (__builtin_constant_p(rw)) \
-                                                       __build_read_lock_const(rw, helper); \
-                                               else \
-                                                       __build_read_lock_ptr(rw, helper); \
-                                       } while (0)
-
-#define __build_write_lock_ptr(rw, helper) \
-       asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-                    "jnz 2f\n" \
-                    "1:\n" \
-                    ".section .text.lock,\"ax\"\n" \
-                    "2:\tcall " helper "\n\t" \
-                    "jmp 1b\n" \
-                    ".previous" \
-                    ::"a" (rw) : "memory")
-
-#define __build_write_lock_const(rw, helper) \
-       asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-                    "jnz 2f\n" \
-                    "1:\n" \
-                    ".section .text.lock,\"ax\"\n" \
-                    "2:\tpushl %%eax\n\t" \
-                    "leal %0,%%eax\n\t" \
-                    "call " helper "\n\t" \
-                    "popl %%eax\n\t" \
-                    "jmp 1b\n" \
-                    ".previous" \
-                    :"=m" (*(volatile int *)rw) : : "memory")
-
-#define __build_write_lock(rw, helper) do { \
-                                               if (__builtin_constant_p(rw)) \
-                                                       __build_write_lock_const(rw, helper); \
-                                               else \
-                                                       __build_write_lock_ptr(rw, helper); \
-                                       } while (0)
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/rwsem.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/rwsem.h
deleted file mode 100644 (file)
index 0d416f7..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/* rwsem.h: R/W semaphores implemented using XADD/CMPXCHG for i486+
- *
- * Written by David Howells (dhowells@redhat.com).
- *
- * Derived from asm-i386/semaphore.h
- *
- *
- * The MSW of the count is the negated number of active writers and waiting
- * lockers, and the LSW is the total number of active locks
- *
- * The lock count is initialized to 0 (no active and no waiting lockers).
- *
- * When a writer subtracts WRITE_BIAS, it'll get 0xffff0001 for the case of an
- * uncontended lock. This can be determined because XADD returns the old value.
- * Readers increment by 1 and see a positive value when uncontended, negative
- * if there are writers (and maybe) readers waiting (in which case it goes to
- * sleep).
- *
- * The value of WAITING_BIAS supports up to 32766 waiting processes. This can
- * be extended to 65534 by manually checking the whole MSW rather than relying
- * on the S flag.
- *
- * The value of ACTIVE_BIAS supports up to 65535 active processes.
- *
- * This should be totally fair - if anything is waiting, a process that wants a
- * lock will go to the back of the queue. When the currently active lock is
- * released, if there's a writer at the front of the queue, then that and only
- * that will be woken up; if there's a bunch of consequtive readers at the
- * front, then they'll all be woken up, but no other readers will be.
- */
-
-#ifndef _I386_RWSEM_H
-#define _I386_RWSEM_H
-
-#ifndef _LINUX_RWSEM_H
-#error please dont include asm/rwsem.h directly, use linux/rwsem.h instead
-#endif
-
-#ifdef __KERNEL__
-
-#include <linux/list.h>
-#include <linux/spinlock.h>
-
-struct rwsem_waiter;
-
-extern struct rw_semaphore *FASTCALL(rwsem_down_read_failed(struct rw_semaphore *sem));
-extern struct rw_semaphore *FASTCALL(rwsem_down_write_failed(struct rw_semaphore *sem));
-extern struct rw_semaphore *FASTCALL(rwsem_wake(struct rw_semaphore *));
-
-/*
- * the semaphore definition
- */
-struct rw_semaphore {
-       signed long             count;
-#define RWSEM_UNLOCKED_VALUE           0x00000000
-#define RWSEM_ACTIVE_BIAS              0x00000001
-#define RWSEM_ACTIVE_MASK              0x0000ffff
-#define RWSEM_WAITING_BIAS             (-0x00010000)
-#define RWSEM_ACTIVE_READ_BIAS         RWSEM_ACTIVE_BIAS
-#define RWSEM_ACTIVE_WRITE_BIAS                (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
-       spinlock_t              wait_lock;
-       struct list_head        wait_list;
-#if RWSEM_DEBUG
-       int                     debug;
-#endif
-};
-
-/*
- * initialisation
- */
-#if RWSEM_DEBUG
-#define __RWSEM_DEBUG_INIT      , 0
-#else
-#define __RWSEM_DEBUG_INIT     /* */
-#endif
-
-#define __RWSEM_INITIALIZER(name) \
-{ RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) \
-       __RWSEM_DEBUG_INIT }
-
-#define DECLARE_RWSEM(name) \
-       struct rw_semaphore name = __RWSEM_INITIALIZER(name)
-
-static inline void init_rwsem(struct rw_semaphore *sem)
-{
-       sem->count = RWSEM_UNLOCKED_VALUE;
-       spin_lock_init(&sem->wait_lock);
-       INIT_LIST_HEAD(&sem->wait_list);
-#if RWSEM_DEBUG
-       sem->debug = 0;
-#endif
-}
-
-/*
- * lock for reading
- */
-static inline void __down_read(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "# beginning down_read\n\t"
-LOCK_PREFIX    "  incl      (%%eax)\n\t" /* adds 0x00000001, returns the old value */
-               "  js        2f\n\t" /* jump if we weren't granted the lock */
-               "1:\n\t"
-               ".section .text.lock,\"ax\"\n"
-               "2:\n\t"
-               "  pushl     %%ecx\n\t"
-               "  pushl     %%edx\n\t"
-               "  call      rwsem_down_read_failed\n\t"
-               "  popl      %%edx\n\t"
-               "  popl      %%ecx\n\t"
-               "  jmp       1b\n"
-               ".previous"
-               "# ending down_read\n\t"
-               : "+m"(sem->count)
-               : "a"(sem)
-               : "memory", "cc");
-}
-
-/*
- * lock for writing
- */
-static inline void __down_write(struct rw_semaphore *sem)
-{
-       int tmp;
-
-       tmp = RWSEM_ACTIVE_WRITE_BIAS;
-       __asm__ __volatile__(
-               "# beginning down_write\n\t"
-LOCK_PREFIX    "  xadd      %0,(%%eax)\n\t" /* subtract 0x0000ffff, returns the old value */
-               "  testl     %0,%0\n\t" /* was the count 0 before? */
-               "  jnz       2f\n\t" /* jump if we weren't granted the lock */
-               "1:\n\t"
-               ".section .text.lock,\"ax\"\n"
-               "2:\n\t"
-               "  pushl     %%ecx\n\t"
-               "  call      rwsem_down_write_failed\n\t"
-               "  popl      %%ecx\n\t"
-               "  jmp       1b\n"
-               ".previous\n"
-               "# ending down_write"
-               : "+d"(tmp), "+m"(sem->count)
-               : "a"(sem)
-               : "memory", "cc");
-}
-
-/*
- * unlock after reading
- */
-static inline void __up_read(struct rw_semaphore *sem)
-{
-       __s32 tmp = -RWSEM_ACTIVE_READ_BIAS;
-       __asm__ __volatile__(
-               "# beginning __up_read\n\t"
-LOCK_PREFIX    "  xadd      %%edx,(%%eax)\n\t" /* subtracts 1, returns the old value */
-               "  js        2f\n\t" /* jump if the lock is being waited upon */
-               "1:\n\t"
-               ".section .text.lock,\"ax\"\n"
-               "2:\n\t"
-               "  decw      %%dx\n\t" /* do nothing if still outstanding active readers */
-               "  jnz       1b\n\t"
-               "  pushl     %%ecx\n\t"
-               "  call      rwsem_wake\n\t"
-               "  popl      %%ecx\n\t"
-               "  jmp       1b\n"
-               ".previous\n"
-               "# ending __up_read\n"
-               : "+m"(sem->count), "+d"(tmp)
-               : "a"(sem)
-               : "memory", "cc");
-}
-
-/*
- * unlock after writing
- */
-static inline void __up_write(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "# beginning __up_write\n\t"
-               "  movl      %2,%%edx\n\t"
-LOCK_PREFIX    "  xaddl     %%edx,(%%eax)\n\t" /* tries to transition 0xffff0001 -> 0x00000000 */
-               "  jnz       2f\n\t" /* jump if the lock is being waited upon */
-               "1:\n\t"
-               ".section .text.lock,\"ax\"\n"
-               "2:\n\t"
-               "  decw      %%dx\n\t" /* did the active count reduce to 0? */
-               "  jnz       1b\n\t" /* jump back if not */
-               "  pushl     %%ecx\n\t"
-               "  call      rwsem_wake\n\t"
-               "  popl      %%ecx\n\t"
-               "  jmp       1b\n"
-               ".previous\n"
-               "# ending __up_write\n"
-               : "+m"(sem->count)
-               : "a"(sem), "i"(-RWSEM_ACTIVE_WRITE_BIAS)
-               : "memory", "cc", "edx");
-}
-
-/*
- * implement atomic add functionality
- */
-static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-LOCK_PREFIX    "addl %1,%0"
-               :"=m"(sem->count)
-               :"ir"(delta), "m"(sem->count));
-}
-
-/*
- * implement exchange and add functionality
- */
-static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem)
-{
-       int tmp = delta;
-
-       __asm__ __volatile__(
-LOCK_PREFIX    "xadd %0,(%2)"
-               : "+r"(tmp), "=m"(sem->count)
-               : "r"(sem), "m"(sem->count)
-               : "memory");
-
-       return tmp+delta;
-}
-
-#endif /* __KERNEL__ */
-#endif /* _I386_RWSEM_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/scatterlist.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/scatterlist.h
deleted file mode 100644 (file)
index 9e2614f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _I386_SCATTERLIST_H
-#define _I386_SCATTERLIST_H
-
-struct scatterlist {
-    char *  address;    /* Location data is to be transferred to, NULL for
-                        * highmem page */
-    struct page * page; /* Location for highmem page, if any */
-    unsigned int offset;/* for highmem, page offset */
-
-    dma_addr_t dma_address;
-    unsigned int length;
-};
-
-#define ISA_DMA_THRESHOLD (0x00ffffff)
-
-#endif /* !(_I386_SCATTERLIST_H) */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/segment.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/segment.h
deleted file mode 100644 (file)
index 5623211..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _ASM_SEGMENT_H
-#define _ASM_SEGMENT_H
-
-#define __KERNEL_CS    0x11
-#define __KERNEL_DS    0x19
-
-#define __USER_CS      0x23
-#define __USER_DS      0x2B
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/semaphore.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/semaphore.h
deleted file mode 100644 (file)
index 76c738e..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-#ifndef _I386_SEMAPHORE_H
-#define _I386_SEMAPHORE_H
-
-#include <linux/linkage.h>
-
-#ifdef __KERNEL__
-
-/*
- * SMP- and interrupt-safe semaphores..
- *
- * (C) Copyright 1996 Linus Torvalds
- *
- * Modified 1996-12-23 by Dave Grothe <dave@gcom.com> to fix bugs in
- *                     the original code and to make semaphore waits
- *                     interruptible so that processes waiting on
- *                     semaphores can be killed.
- * Modified 1999-02-14 by Andrea Arcangeli, split the sched.c helper
- *                    functions in asm/sempahore-helper.h while fixing a
- *                    potential and subtle race discovered by Ulrich Schmid
- *                    in down_interruptible(). Since I started to play here I
- *                    also implemented the `trylock' semaphore operation.
- *          1999-07-02 Artur Skawina <skawina@geocities.com>
- *                     Optimized "0(ecx)" -> "(ecx)" (the assembler does not
- *                     do this). Changed calling sequences from push/jmp to
- *                     traditional call/ret.
- * Modified 2001-01-01 Andreas Franck <afranck@gmx.de>
- *                    Some hacks to ensure compatibility with recent
- *                    GCC snapshots, to avoid stack corruption when compiling
- *                    with -fomit-frame-pointer. It's not sure if this will
- *                    be fixed in GCC, as our previous implementation was a
- *                    bit dubious.
- *
- * If you would like to see an analysis of this implementation, please
- * ftp to gcom.com and download the file
- * /pub/linux/src/semaphore/semaphore-2.0.24.tar.gz.
- *
- */
-
-#include <asm/system.h>
-#include <asm/atomic.h>
-#include <linux/wait.h>
-#include <linux/rwsem.h>
-
-struct semaphore {
-       atomic_t count;
-       int sleepers;
-       wait_queue_head_t wait;
-#if WAITQUEUE_DEBUG
-       long __magic;
-#endif
-};
-
-#if WAITQUEUE_DEBUG
-# define __SEM_DEBUG_INIT(name) \
-               , (int)&(name).__magic
-#else
-# define __SEM_DEBUG_INIT(name)
-#endif
-
-#define __SEMAPHORE_INITIALIZER(name,count) \
-{ ATOMIC_INIT(count), 0, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
-       __SEM_DEBUG_INIT(name) }
-
-#define __MUTEX_INITIALIZER(name) \
-       __SEMAPHORE_INITIALIZER(name,1)
-
-#define __DECLARE_SEMAPHORE_GENERIC(name,count) \
-       struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)
-
-#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
-#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
-
-static inline void sema_init (struct semaphore *sem, int val)
-{
-/*
- *     *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
- *
- * i'd rather use the more flexible initialization above, but sadly
- * GCC 2.7.2.3 emits a bogus warning. EGCS doesnt. Oh well.
- */
-       atomic_set(&sem->count, val);
-       sem->sleepers = 0;
-       init_waitqueue_head(&sem->wait);
-#if WAITQUEUE_DEBUG
-       sem->__magic = (int)&sem->__magic;
-#endif
-}
-
-static inline void init_MUTEX (struct semaphore *sem)
-{
-       sema_init(sem, 1);
-}
-
-static inline void init_MUTEX_LOCKED (struct semaphore *sem)
-{
-       sema_init(sem, 0);
-}
-
-asmlinkage void __down_failed(void /* special register calling convention */);
-asmlinkage int  __down_failed_interruptible(void  /* params in registers */);
-asmlinkage int  __down_failed_trylock(void  /* params in registers */);
-asmlinkage void __up_wakeup(void /* special register calling convention */);
-
-asmlinkage void __down(struct semaphore * sem);
-asmlinkage int  __down_interruptible(struct semaphore * sem);
-asmlinkage int  __down_trylock(struct semaphore * sem);
-asmlinkage void __up(struct semaphore * sem);
-
-/*
- * This is ugly, but we want the default case to fall through.
- * "__down_failed" is a special asm handler that calls the C
- * routine that actually waits. See arch/i386/kernel/semaphore.c
- */
-static inline void down(struct semaphore * sem)
-{
-#if WAITQUEUE_DEBUG
-       CHECK_MAGIC(sem->__magic);
-#endif
-
-       __asm__ __volatile__(
-               "# atomic down operation\n\t"
-               LOCK "decl %0\n\t"     /* --sem->count */
-               "js 2f\n"
-               "1:\n"
-               ".section .text.lock,\"ax\"\n"
-               "2:\tcall __down_failed\n\t"
-               "jmp 1b\n"
-               ".previous"
-               :"=m" (sem->count)
-               :"c" (sem)
-               :"memory");
-}
-
-/*
- * Interruptible try to acquire a semaphore.  If we obtained
- * it, return zero.  If we were interrupted, returns -EINTR
- */
-static inline int down_interruptible(struct semaphore * sem)
-{
-       int result;
-
-#if WAITQUEUE_DEBUG
-       CHECK_MAGIC(sem->__magic);
-#endif
-
-       __asm__ __volatile__(
-               "# atomic interruptible down operation\n\t"
-               LOCK "decl %1\n\t"     /* --sem->count */
-               "js 2f\n\t"
-               "xorl %0,%0\n"
-               "1:\n"
-               ".section .text.lock,\"ax\"\n"
-               "2:\tcall __down_failed_interruptible\n\t"
-               "jmp 1b\n"
-               ".previous"
-               :"=a" (result), "=m" (sem->count)
-               :"c" (sem)
-               :"memory");
-       return result;
-}
-
-/*
- * Non-blockingly attempt to down() a semaphore.
- * Returns zero if we acquired it
- */
-static inline int down_trylock(struct semaphore * sem)
-{
-       int result;
-
-#if WAITQUEUE_DEBUG
-       CHECK_MAGIC(sem->__magic);
-#endif
-
-       __asm__ __volatile__(
-               "# atomic interruptible down operation\n\t"
-               LOCK "decl %1\n\t"     /* --sem->count */
-               "js 2f\n\t"
-               "xorl %0,%0\n"
-               "1:\n"
-               ".section .text.lock,\"ax\"\n"
-               "2:\tcall __down_failed_trylock\n\t"
-               "jmp 1b\n"
-               ".previous"
-               :"=a" (result), "=m" (sem->count)
-               :"c" (sem)
-               :"memory");
-       return result;
-}
-
-/*
- * Note! This is subtle. We jump to wake people up only if
- * the semaphore was negative (== somebody was waiting on it).
- * The default case (no contention) will result in NO
- * jumps for both down() and up().
- */
-static inline void up(struct semaphore * sem)
-{
-#if WAITQUEUE_DEBUG
-       CHECK_MAGIC(sem->__magic);
-#endif
-       __asm__ __volatile__(
-               "# atomic up operation\n\t"
-               LOCK "incl %0\n\t"     /* ++sem->count */
-               "jle 2f\n"
-               "1:\n"
-               ".section .text.lock,\"ax\"\n"
-               "2:\tcall __up_wakeup\n\t"
-               "jmp 1b\n"
-               ".previous"
-               :"=m" (sem->count)
-               :"c" (sem)
-               :"memory");
-}
-
-#endif
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/sembuf.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/sembuf.h
deleted file mode 100644 (file)
index 3238351..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _I386_SEMBUF_H
-#define _I386_SEMBUF_H
-
-/* 
- * The semid64_ds structure for i386 architecture.
- * Note extra padding because this structure is passed back and forth
- * between kernel and user space.
- *
- * Pad space is left for:
- * - 64-bit time_t to solve y2038 problem
- * - 2 miscellaneous 32-bit values
- */
-
-struct semid64_ds {
-       struct ipc64_perm sem_perm;             /* permissions .. see ipc.h */
-       __kernel_time_t sem_otime;              /* last semop time */
-       unsigned long   __unused1;
-       __kernel_time_t sem_ctime;              /* last change time */
-       unsigned long   __unused2;
-       unsigned long   sem_nsems;              /* no. of semaphores in array */
-       unsigned long   __unused3;
-       unsigned long   __unused4;
-};
-
-#endif /* _I386_SEMBUF_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/serial.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/serial.h
deleted file mode 100644 (file)
index ecc8278..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * include/asm-i386/serial.h
- */
-
-#include <linux/config.h>
-
-/*
- * This assumes you have a 1.8432 MHz clock for your UART.
- *
- * It'd be nice if someone built a serial card with a 24.576 MHz
- * clock, since the 16550A is capable of handling a top speed of 1.5
- * megabits/second; but this requires the faster clock.
- */
-#define BASE_BAUD ( 1843200 / 16 )
-
-/* Standard COM flags (except for COM4, because of the 8514 problem) */
-#ifdef CONFIG_SERIAL_DETECT_IRQ
-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
-#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
-#else
-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
-#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
-#endif
-
-#ifdef CONFIG_SERIAL_MANY_PORTS
-#define FOURPORT_FLAGS ASYNC_FOURPORT
-#define ACCENT_FLAGS 0
-#define BOCA_FLAGS 0
-#define HUB6_FLAGS 0
-#define RS_TABLE_SIZE  64
-#else
-#define RS_TABLE_SIZE
-#endif
-
-#define MCA_COM_FLAGS  (STD_COM_FLAGS|ASYNC_BOOT_ONLYMCA)
-
-/*
- * The following define the access methods for the HUB6 card. All
- * access is through two ports for all 24 possible chips. The card is
- * selected through the high 2 bits, the port on that card with the
- * "middle" 3 bits, and the register on that port with the bottom
- * 3 bits.
- *
- * While the access port and interrupt is configurable, the default
- * port locations are 0x302 for the port control register, and 0x303
- * for the data read/write register. Normally, the interrupt is at irq3
- * but can be anything from 3 to 7 inclusive. Note that using 3 will
- * require disabling com2.
- */
-
-#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
-
-#define STD_SERIAL_PORT_DEFNS                  \
-       /* UART CLK   PORT IRQ     FLAGS        */                      \
-       { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS },      /* ttyS0 */     \
-       { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS },      /* ttyS1 */     \
-       { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS },      /* ttyS2 */     \
-       { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS },     /* ttyS3 */
-
-
-#ifdef CONFIG_SERIAL_MANY_PORTS
-#define EXTRA_SERIAL_PORT_DEFNS                        \
-       { 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS },     /* ttyS4 */     \
-       { 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS },     /* ttyS5 */     \
-       { 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS },     /* ttyS6 */     \
-       { 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS },     /* ttyS7 */     \
-       { 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS },     /* ttyS8 */     \
-       { 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS },     /* ttyS9 */     \
-       { 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS },     /* ttyS10 */    \
-       { 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS },     /* ttyS11 */    \
-       { 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS },       /* ttyS12 */    \
-       { 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS },       /* ttyS13 */    \
-       { 0, BASE_BAUD, 0x000, 0, 0 },  /* ttyS14 (spare) */            \
-       { 0, BASE_BAUD, 0x000, 0, 0 },  /* ttyS15 (spare) */            \
-       { 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS },        /* ttyS16 */    \
-       { 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS },        /* ttyS17 */    \
-       { 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS },        /* ttyS18 */    \
-       { 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS },        /* ttyS19 */    \
-       { 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS },        /* ttyS20 */    \
-       { 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS },        /* ttyS21 */    \
-       { 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS },        /* ttyS22 */    \
-       { 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS },        /* ttyS23 */    \
-       { 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS },        /* ttyS24 */    \
-       { 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS },        /* ttyS25 */    \
-       { 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS },        /* ttyS26 */    \
-       { 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS },        /* ttyS27 */    \
-       { 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS },        /* ttyS28 */    \
-       { 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS },        /* ttyS29 */    \
-       { 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS },        /* ttyS30 */    \
-       { 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS },        /* ttyS31 */
-#else
-#define EXTRA_SERIAL_PORT_DEFNS
-#endif
-
-/* You can have up to four HUB6's in the system, but I've only
- * included two cards here for a total of twelve ports.
- */
-#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
-#define HUB6_SERIAL_PORT_DFNS          \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) },  /* ttyS32 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) },  /* ttyS33 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) },  /* ttyS34 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) },  /* ttyS35 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) },  /* ttyS36 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) },  /* ttyS37 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) },  /* ttyS38 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) },  /* ttyS39 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) },  /* ttyS40 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) },  /* ttyS41 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) },  /* ttyS42 */ \
-       { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) },  /* ttyS43 */
-#else
-#define HUB6_SERIAL_PORT_DFNS
-#endif
-
-#ifdef CONFIG_MCA
-#define MCA_SERIAL_PORT_DFNS                   \
-       { 0, BASE_BAUD, 0x3220, 3, MCA_COM_FLAGS },     \
-       { 0, BASE_BAUD, 0x3228, 3, MCA_COM_FLAGS },     \
-       { 0, BASE_BAUD, 0x4220, 3, MCA_COM_FLAGS },     \
-       { 0, BASE_BAUD, 0x4228, 3, MCA_COM_FLAGS },     \
-       { 0, BASE_BAUD, 0x5220, 3, MCA_COM_FLAGS },     \
-       { 0, BASE_BAUD, 0x5228, 3, MCA_COM_FLAGS },
-#else
-#define MCA_SERIAL_PORT_DFNS
-#endif
-
-#define SERIAL_PORT_DFNS               \
-       STD_SERIAL_PORT_DEFNS           \
-       EXTRA_SERIAL_PORT_DEFNS         \
-       HUB6_SERIAL_PORT_DFNS           \
-       MCA_SERIAL_PORT_DFNS
-
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/setup.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/setup.h
deleted file mode 100644 (file)
index ae25cc4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- *     Just a place holder. We don't want to have to test x86 before
- *     we include stuff
- */
-
-#ifndef _i386_SETUP_H
-#define _i386_SETUP_H
-
-
-#endif /* _i386_SETUP_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/shmbuf.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/shmbuf.h
deleted file mode 100644 (file)
index d1cdc3c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef _I386_SHMBUF_H
-#define _I386_SHMBUF_H
-
-/* 
- * The shmid64_ds structure for i386 architecture.
- * Note extra padding because this structure is passed back and forth
- * between kernel and user space.
- *
- * Pad space is left for:
- * - 64-bit time_t to solve y2038 problem
- * - 2 miscellaneous 32-bit values
- */
-
-struct shmid64_ds {
-       struct ipc64_perm       shm_perm;       /* operation perms */
-       size_t                  shm_segsz;      /* size of segment (bytes) */
-       __kernel_time_t         shm_atime;      /* last attach time */
-       unsigned long           __unused1;
-       __kernel_time_t         shm_dtime;      /* last detach time */
-       unsigned long           __unused2;
-       __kernel_time_t         shm_ctime;      /* last change time */
-       unsigned long           __unused3;
-       __kernel_pid_t          shm_cpid;       /* pid of creator */
-       __kernel_pid_t          shm_lpid;       /* pid of last operator */
-       unsigned long           shm_nattch;     /* no. of current attaches */
-       unsigned long           __unused4;
-       unsigned long           __unused5;
-};
-
-struct shminfo64 {
-       unsigned long   shmmax;
-       unsigned long   shmmin;
-       unsigned long   shmmni;
-       unsigned long   shmseg;
-       unsigned long   shmall;
-       unsigned long   __unused1;
-       unsigned long   __unused2;
-       unsigned long   __unused3;
-       unsigned long   __unused4;
-};
-
-#endif /* _I386_SHMBUF_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/shmparam.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/shmparam.h
deleted file mode 100644 (file)
index 786243a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ASMI386_SHMPARAM_H
-#define _ASMI386_SHMPARAM_H
-
-#define        SHMLBA PAGE_SIZE                 /* attach addr a multiple of this */
-
-#endif /* _ASMI386_SHMPARAM_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/sigcontext.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/sigcontext.h
deleted file mode 100644 (file)
index b511459..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef _ASMi386_SIGCONTEXT_H
-#define _ASMi386_SIGCONTEXT_H
-
-/*
- * As documented in the iBCS2 standard..
- *
- * The first part of "struct _fpstate" is just the normal i387
- * hardware setup, the extra "status" word is used to save the
- * coprocessor status word before entering the handler.
- *
- * Pentium III FXSR, SSE support
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- *
- * The FPU state data structure has had to grow to accomodate the
- * extended FPU state required by the Streaming SIMD Extensions.
- * There is no documented standard to accomplish this at the moment.
- */
-struct _fpreg {
-       unsigned short significand[4];
-       unsigned short exponent;
-};
-
-struct _fpxreg {
-       unsigned short significand[4];
-       unsigned short exponent;
-       unsigned short padding[3];
-};
-
-struct _xmmreg {
-       unsigned long element[4];
-};
-
-struct _fpstate {
-       /* Regular FPU environment */
-       unsigned long   cw;
-       unsigned long   sw;
-       unsigned long   tag;
-       unsigned long   ipoff;
-       unsigned long   cssel;
-       unsigned long   dataoff;
-       unsigned long   datasel;
-       struct _fpreg   _st[8];
-       unsigned short  status;
-       unsigned short  magic;          /* 0xffff = regular FPU data only */
-
-       /* FXSR FPU environment */
-       unsigned long   _fxsr_env[6];   /* FXSR FPU env is ignored */
-       unsigned long   mxcsr;
-       unsigned long   reserved;
-       struct _fpxreg  _fxsr_st[8];    /* FXSR FPU reg data is ignored */
-       struct _xmmreg  _xmm[8];
-       unsigned long   padding[56];
-};
-
-#define X86_FXSR_MAGIC         0x0000
-
-struct sigcontext {
-       unsigned short gs, __gsh;
-       unsigned short fs, __fsh;
-       unsigned short es, __esh;
-       unsigned short ds, __dsh;
-       unsigned long edi;
-       unsigned long esi;
-       unsigned long ebp;
-       unsigned long esp;
-       unsigned long ebx;
-       unsigned long edx;
-       unsigned long ecx;
-       unsigned long eax;
-       unsigned long trapno;
-       unsigned long err;
-       unsigned long eip;
-       unsigned short cs, __csh;
-       unsigned long eflags;
-       unsigned long esp_at_signal;
-       unsigned short ss, __ssh;
-       struct _fpstate * fpstate;
-       unsigned long oldmask;
-       unsigned long cr2;
-};
-
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/siginfo.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/siginfo.h
deleted file mode 100644 (file)
index 9abf542..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-#ifndef _I386_SIGINFO_H
-#define _I386_SIGINFO_H
-
-#include <linux/types.h>
-
-/* XXX: This structure was copied from the Alpha; is there an iBCS version?  */
-
-typedef union sigval {
-       int sival_int;
-       void *sival_ptr;
-} sigval_t;
-
-#define SI_MAX_SIZE    128
-#define SI_PAD_SIZE    ((SI_MAX_SIZE/sizeof(int)) - 3)
-
-typedef struct siginfo {
-       int si_signo;
-       int si_errno;
-       int si_code;
-
-       union {
-               int _pad[SI_PAD_SIZE];
-
-               /* kill() */
-               struct {
-                       pid_t _pid;             /* sender's pid */
-                       uid_t _uid;             /* sender's uid */
-               } _kill;
-
-               /* POSIX.1b timers */
-               struct {
-                       unsigned int _timer1;
-                       unsigned int _timer2;
-               } _timer;
-
-               /* POSIX.1b signals */
-               struct {
-                       pid_t _pid;             /* sender's pid */
-                       uid_t _uid;             /* sender's uid */
-                       sigval_t _sigval;
-               } _rt;
-
-               /* SIGCHLD */
-               struct {
-                       pid_t _pid;             /* which child */
-                       uid_t _uid;             /* sender's uid */
-                       int _status;            /* exit code */
-                       clock_t _utime;
-                       clock_t _stime;
-               } _sigchld;
-
-               /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
-               struct {
-                       void *_addr; /* faulting insn/memory ref. */
-               } _sigfault;
-
-               /* SIGPOLL */
-               struct {
-                       int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
-                       int _fd;
-               } _sigpoll;
-       } _sifields;
-} siginfo_t;
-
-/*
- * How these fields are to be accessed.
- */
-#define si_pid         _sifields._kill._pid
-#define si_uid         _sifields._kill._uid
-#define si_status      _sifields._sigchld._status
-#define si_utime       _sifields._sigchld._utime
-#define si_stime       _sifields._sigchld._stime
-#define si_value       _sifields._rt._sigval
-#define si_int         _sifields._rt._sigval.sival_int
-#define si_ptr         _sifields._rt._sigval.sival_ptr
-#define si_addr                _sifields._sigfault._addr
-#define si_band                _sifields._sigpoll._band
-#define si_fd          _sifields._sigpoll._fd
-
-#ifdef __KERNEL__
-#define __SI_MASK      0xffff0000
-#define __SI_KILL      (0 << 16)
-#define __SI_TIMER     (1 << 16)
-#define __SI_POLL      (2 << 16)
-#define __SI_FAULT     (3 << 16)
-#define __SI_CHLD      (4 << 16)
-#define __SI_RT                (5 << 16)
-#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
-#else
-#define __SI_KILL      0
-#define __SI_TIMER     0
-#define __SI_POLL      0
-#define __SI_FAULT     0
-#define __SI_CHLD      0
-#define __SI_RT                0
-#define __SI_CODE(T,N) (N)
-#endif
-
-/*
- * si_code values
- * Digital reserves positive values for kernel-generated signals.
- */
-#define SI_USER                0               /* sent by kill, sigsend, raise */
-#define SI_KERNEL      0x80            /* sent by the kernel from somewhere */
-#define SI_QUEUE       -1              /* sent by sigqueue */
-#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
-#define SI_MESGQ       -3              /* sent by real time mesq state change */
-#define SI_ASYNCIO     -4              /* sent by AIO completion */
-#define SI_SIGIO       -5              /* sent by queued SIGIO */
-
-#define SI_FROMUSER(siptr)     ((siptr)->si_code <= 0)
-#define SI_FROMKERNEL(siptr)   ((siptr)->si_code > 0)
-
-/*
- * SIGILL si_codes
- */
-#define ILL_ILLOPC     (__SI_FAULT|1)  /* illegal opcode */
-#define ILL_ILLOPN     (__SI_FAULT|2)  /* illegal operand */
-#define ILL_ILLADR     (__SI_FAULT|3)  /* illegal addressing mode */
-#define ILL_ILLTRP     (__SI_FAULT|4)  /* illegal trap */
-#define ILL_PRVOPC     (__SI_FAULT|5)  /* privileged opcode */
-#define ILL_PRVREG     (__SI_FAULT|6)  /* privileged register */
-#define ILL_COPROC     (__SI_FAULT|7)  /* coprocessor error */
-#define ILL_BADSTK     (__SI_FAULT|8)  /* internal stack error */
-#define NSIGILL                8
-
-/*
- * SIGFPE si_codes
- */
-#define FPE_INTDIV     (__SI_FAULT|1)  /* integer divide by zero */
-#define FPE_INTOVF     (__SI_FAULT|2)  /* integer overflow */
-#define FPE_FLTDIV     (__SI_FAULT|3)  /* floating point divide by zero */
-#define FPE_FLTOVF     (__SI_FAULT|4)  /* floating point overflow */
-#define FPE_FLTUND     (__SI_FAULT|5)  /* floating point underflow */
-#define FPE_FLTRES     (__SI_FAULT|6)  /* floating point inexact result */
-#define FPE_FLTINV     (__SI_FAULT|7)  /* floating point invalid operation */
-#define FPE_FLTSUB     (__SI_FAULT|8)  /* subscript out of range */
-#define NSIGFPE                8
-
-/*
- * SIGSEGV si_codes
- */
-#define SEGV_MAPERR    (__SI_FAULT|1)  /* address not mapped to object */
-#define SEGV_ACCERR    (__SI_FAULT|2)  /* invalid permissions for mapped object */
-#define NSIGSEGV       2
-
-/*
- * SIGBUS si_codes
- */
-#define BUS_ADRALN     (__SI_FAULT|1)  /* invalid address alignment */
-#define BUS_ADRERR     (__SI_FAULT|2)  /* non-existant physical address */
-#define BUS_OBJERR     (__SI_FAULT|3)  /* object specific hardware error */
-#define NSIGBUS                3
-
-/*
- * SIGTRAP si_codes
- */
-#define TRAP_BRKPT     (__SI_FAULT|1)  /* process breakpoint */
-#define TRAP_TRACE     (__SI_FAULT|2)  /* process trace trap */
-#define NSIGTRAP       2
-
-/*
- * SIGCHLD si_codes
- */
-#define CLD_EXITED     (__SI_CHLD|1)   /* child has exited */
-#define CLD_KILLED     (__SI_CHLD|2)   /* child was killed */
-#define CLD_DUMPED     (__SI_CHLD|3)   /* child terminated abnormally */
-#define CLD_TRAPPED    (__SI_CHLD|4)   /* traced child has trapped */
-#define CLD_STOPPED    (__SI_CHLD|5)   /* child has stopped */
-#define CLD_CONTINUED  (__SI_CHLD|6)   /* stopped child has continued */
-#define NSIGCHLD       6
-
-/*
- * SIGPOLL si_codes
- */
-#define POLL_IN                (__SI_POLL|1)   /* data input available */
-#define POLL_OUT       (__SI_POLL|2)   /* output buffers available */
-#define POLL_MSG       (__SI_POLL|3)   /* input message available */
-#define POLL_ERR       (__SI_POLL|4)   /* i/o error */
-#define POLL_PRI       (__SI_POLL|5)   /* high priority input available */
-#define POLL_HUP       (__SI_POLL|6)   /* device disconnected */
-#define NSIGPOLL       6
-
-/*
- * sigevent definitions
- * 
- * It seems likely that SIGEV_THREAD will have to be handled from 
- * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
- * thread manager then catches and does the appropriate nonsense.
- * However, everything is written out here so as to not get lost.
- */
-#define SIGEV_SIGNAL   0       /* notify via signal */
-#define SIGEV_NONE     1       /* other notification: meaningless */
-#define SIGEV_THREAD   2       /* deliver via thread creation */
-
-#define SIGEV_MAX_SIZE 64
-#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
-
-typedef struct sigevent {
-       sigval_t sigev_value;
-       int sigev_signo;
-       int sigev_notify;
-       union {
-               int _pad[SIGEV_PAD_SIZE];
-
-               struct {
-                       void (*_function)(sigval_t);
-                       void *_attribute;       /* really pthread_attr_t */
-               } _sigev_thread;
-       } _sigev_un;
-} sigevent_t;
-
-#define sigev_notify_function  _sigev_un._sigev_thread._function
-#define sigev_notify_attributes        _sigev_un._sigev_thread._attribute
-
-#ifdef __KERNEL__
-#include <linux/string.h>
-
-static inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
-{
-       if (from->si_code < 0)
-               memcpy(to, from, sizeof(siginfo_t));
-       else
-               /* _sigchld is currently the largest know union member */
-               memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
-}
-
-extern int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from);
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/signal.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/signal.h
deleted file mode 100644 (file)
index 8740d4e..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#ifndef _ASMi386_SIGNAL_H
-#define _ASMi386_SIGNAL_H
-
-#include <linux/types.h>
-
-/* Avoid too many header ordering problems.  */
-struct siginfo;
-
-#ifdef __KERNEL__
-/* Most things should be clean enough to redefine this at will, if care
-   is taken to make libc match.  */
-
-#define _NSIG          64
-#define _NSIG_BPW      32
-#define _NSIG_WORDS    (_NSIG / _NSIG_BPW)
-
-typedef unsigned long old_sigset_t;            /* at least 32 bits */
-
-typedef struct {
-       unsigned long sig[_NSIG_WORDS];
-} sigset_t;
-
-#else
-/* Here we must cater to libcs that poke about in kernel headers.  */
-
-#define NSIG           32
-typedef unsigned long sigset_t;
-
-#endif /* __KERNEL__ */
-
-#define SIGHUP          1
-#define SIGINT          2
-#define SIGQUIT                 3
-#define SIGILL          4
-#define SIGTRAP                 5
-#define SIGABRT                 6
-#define SIGIOT          6
-#define SIGBUS          7
-#define SIGFPE          8
-#define SIGKILL                 9
-#define SIGUSR1                10
-#define SIGSEGV                11
-#define SIGUSR2                12
-#define SIGPIPE                13
-#define SIGALRM                14
-#define SIGTERM                15
-#define SIGSTKFLT      16
-#define SIGCHLD                17
-#define SIGCONT                18
-#define SIGSTOP                19
-#define SIGTSTP                20
-#define SIGTTIN                21
-#define SIGTTOU                22
-#define SIGURG         23
-#define SIGXCPU                24
-#define SIGXFSZ                25
-#define SIGVTALRM      26
-#define SIGPROF                27
-#define SIGWINCH       28
-#define SIGIO          29
-#define SIGPOLL                SIGIO
-/*
-#define SIGLOST                29
-*/
-#define SIGPWR         30
-#define SIGSYS         31
-#define        SIGUNUSED       31
-
-/* These should not be considered constants from userland.  */
-#define SIGRTMIN       32
-#define SIGRTMAX       (_NSIG-1)
-
-/*
- * SA_FLAGS values:
- *
- * SA_ONSTACK indicates that a registered stack_t will be used.
- * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
- * SA_RESTART flag to get restarting signals (which were the default long ago)
- * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
- * SA_RESETHAND clears the handler when the signal is delivered.
- * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
- * SA_NODEFER prevents the current signal from being masked in the handler.
- *
- * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
- * Unix names RESETHAND and NODEFER respectively.
- */
-#define SA_NOCLDSTOP   0x00000001
-#define SA_NOCLDWAIT   0x00000002 /* not supported yet */
-#define SA_SIGINFO     0x00000004
-#define SA_ONSTACK     0x08000000
-#define SA_RESTART     0x10000000
-#define SA_NODEFER     0x40000000
-#define SA_RESETHAND   0x80000000
-
-#define SA_NOMASK      SA_NODEFER
-#define SA_ONESHOT     SA_RESETHAND
-#define SA_INTERRUPT   0x20000000 /* dummy -- ignored */
-
-#define SA_RESTORER    0x04000000
-
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK     1
-#define SS_DISABLE     2
-
-#define MINSIGSTKSZ    2048
-#define SIGSTKSZ       8192
-
-#ifdef __KERNEL__
-
-/*
- * These values of sa_flags are used only by the kernel as part of the
- * irq handling routines.
- *
- * SA_INTERRUPT is also used by the irq handling routines.
- * SA_SHIRQ is for shared interrupt support on PCI and EISA.
- */
-#define SA_PROBE               SA_ONESHOT
-#define SA_SAMPLE_RANDOM       SA_RESTART
-#define SA_SHIRQ               0x04000000
-#endif
-
-#define SIG_BLOCK          0   /* for blocking signals */
-#define SIG_UNBLOCK        1   /* for unblocking signals */
-#define SIG_SETMASK        2   /* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL        ((__sighandler_t)0)     /* default signal handling */
-#define SIG_IGN        ((__sighandler_t)1)     /* ignore signal */
-#define SIG_ERR        ((__sighandler_t)-1)    /* error return from signal */
-
-#ifdef __KERNEL__
-struct old_sigaction {
-       __sighandler_t sa_handler;
-       old_sigset_t sa_mask;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-};
-
-struct sigaction {
-       __sighandler_t sa_handler;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-       sigset_t sa_mask;               /* mask last for extensibility */
-};
-
-struct k_sigaction {
-       struct sigaction sa;
-};
-#else
-/* Here we must cater to libcs that poke about in kernel headers.  */
-
-struct sigaction {
-       union {
-         __sighandler_t _sa_handler;
-         void (*_sa_sigaction)(int, struct siginfo *, void *);
-       } _u;
-       sigset_t sa_mask;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-};
-
-#define sa_handler     _u._sa_handler
-#define sa_sigaction   _u._sa_sigaction
-
-#endif /* __KERNEL__ */
-
-typedef struct sigaltstack {
-       void *ss_sp;
-       int ss_flags;
-       size_t ss_size;
-} stack_t;
-
-#ifdef __KERNEL__
-#include <asm/sigcontext.h>
-
-#define __HAVE_ARCH_SIG_BITOPS
-
-static __inline__ void sigaddset(sigset_t *set, int _sig)
-{
-       __asm__("btsl %1,%0" : "=m"(*set) : "Ir"(_sig - 1) : "cc");
-}
-
-static __inline__ void sigdelset(sigset_t *set, int _sig)
-{
-       __asm__("btrl %1,%0" : "=m"(*set) : "Ir"(_sig - 1) : "cc");
-}
-
-static __inline__ int __const_sigismember(sigset_t *set, int _sig)
-{
-       unsigned long sig = _sig - 1;
-       return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
-}
-
-static __inline__ int __gen_sigismember(sigset_t *set, int _sig)
-{
-       int ret;
-       __asm__("btl %2,%1\n\tsbbl %0,%0"
-               : "=r"(ret) : "m"(*set), "Ir"(_sig-1) : "cc");
-       return ret;
-}
-
-#define sigismember(set,sig)                   \
-       (__builtin_constant_p(sig) ?            \
-        __const_sigismember((set),(sig)) :     \
-        __gen_sigismember((set),(sig)))
-
-#define sigmask(sig)   (1UL << ((sig) - 1))
-
-static __inline__ int sigfindinword(unsigned long word)
-{
-       __asm__("bsfl %1,%0" : "=r"(word) : "rm"(word) : "cc");
-       return word;
-}
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/smp.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/smp.h
deleted file mode 100644 (file)
index 8a8de24..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#ifndef __ASM_SMP_H
-#define __ASM_SMP_H
-
-/*
- * We need the APIC definitions automatically as part of 'smp.h'
- */
-#ifndef __ASSEMBLY__
-#include <linux/config.h>
-#include <linux/threads.h>
-#include <linux/ptrace.h>
-#endif
-
-#ifdef CONFIG_X86_LOCAL_APIC
-#ifndef __ASSEMBLY__
-#include <asm/bitops.h>
-#include <asm/mpspec.h>
-#ifdef CONFIG_X86_IO_APIC
-#include <asm/io_apic.h>
-#endif
-#include <asm/apic.h>
-#endif
-#endif
-
-#ifdef CONFIG_SMP
-#  define TARGET_CPUS cpu_online_map
-#  define INT_DELIVERY_MODE 1     /* logical delivery broadcast to all procs */
-#else
-# define INT_DELIVERY_MODE 1     /* logical delivery */
-# define TARGET_CPUS 0x01
-#endif
-
-#ifndef clustered_apic_mode
-  #define clustered_apic_mode (0)
-  #define esr_disable (0)
-#endif 
-
-#ifdef CONFIG_SMP
-#ifndef __ASSEMBLY__
-
-/*
- * Private routines/data
- */
-extern void smp_alloc_memory(void);
-extern unsigned long phys_cpu_present_map;
-extern unsigned long cpu_online_map;
-extern volatile unsigned long smp_invalidate_needed;
-extern int pic_mode;
-extern void smp_flush_tlb(void);
-extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
-extern void smp_send_reschedule(int cpu);
-extern void smp_invalidate_rcv(void);          /* Process an NMI */
-extern void (*mtrr_hook) (void);
-extern void zap_low_mappings (void);
-
-/*
- * On x86 all CPUs are mapped 1:1 to the APIC space.
- * This simplifies scheduling and IPI sending and
- * compresses data structures.
- */
-static inline int cpu_logical_map(int cpu)
-{
-       return cpu;
-}
-static inline int cpu_number_map(int cpu)
-{
-       return cpu;
-}
-
-/*
- * Some lowlevel functions might want to know about
- * the real APIC ID <-> CPU # mapping.
- */
-#define MAX_APICID 256
-extern volatile int cpu_to_physical_apicid[NR_CPUS];
-extern volatile int physical_apicid_to_cpu[MAX_APICID];
-extern volatile int cpu_to_logical_apicid[NR_CPUS];
-extern volatile int logical_apicid_to_cpu[MAX_APICID];
-
-/*
- * General functions that each host system must provide.
- */
-extern void smp_boot_cpus(void);
-extern void smp_store_cpu_info(int id);                /* Store per CPU info (like the initial udelay numbers */
-
-/*
- * This function is needed by all SMP systems. It must _always_ be valid
- * from the initial startup. We map APIC_BASE very early in page_setup(),
- * so this is correct in the x86 case.
- */
-
-#define smp_processor_id() (current->processor)
-
-#endif /* !__ASSEMBLY__ */
-
-#define NO_PROC_ID             0xFF            /* No processor magic marker */
-
-/*
- *     This magic constant controls our willingness to transfer
- *     a process across CPUs. Such a transfer incurs misses on the L1
- *     cache, and on a P6 or P5 with multiple L2 caches L2 hits. My
- *     gut feeling is this will vary by board in value. For a board
- *     with separate L2 cache it probably depends also on the RSS, and
- *     for a board with shared L2 cache it ought to decay fast as other
- *     processes are run.
- */
-#define PROC_CHANGE_PENALTY    15              /* Schedule penalty */
-
-#endif
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/smplock.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/smplock.h
deleted file mode 100644 (file)
index 864351c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * <asm/smplock.h>
- *
- * i386 SMP lock implementation
- */
-#include <linux/interrupt.h>
-#include <linux/spinlock.h>
-#include <linux/sched.h>
-#include <asm/current.h>
-
-extern spinlock_t kernel_flag;
-
-#define kernel_locked()                spin_is_locked(&kernel_flag)
-
-/*
- * Release global kernel lock and global interrupt lock
- */
-#define release_kernel_lock(task, cpu) \
-do { \
-       if (task->lock_depth >= 0) \
-               spin_unlock(&kernel_flag); \
-       release_irqlock(cpu); \
-       __sti(); \
-} while (0)
-
-/*
- * Re-acquire the kernel lock
- */
-#define reacquire_kernel_lock(task) \
-do { \
-       if (task->lock_depth >= 0) \
-               spin_lock(&kernel_flag); \
-} while (0)
-
-
-/*
- * Getting the big kernel lock.
- *
- * This cannot happen asynchronously,
- * so we only need to worry about other
- * CPU's.
- */
-static __inline__ void lock_kernel(void)
-{
-#if 1
-       if (!++current->lock_depth)
-               spin_lock(&kernel_flag);
-#else
-       __asm__ __volatile__(
-               "incl %1\n\t"
-               "jne 9f"
-               spin_lock_string
-               "\n9:"
-               :"=m" (__dummy_lock(&kernel_flag)),
-                "=m" (current->lock_depth));
-#endif
-}
-
-static __inline__ void unlock_kernel(void)
-{
-       if (current->lock_depth < 0)
-               BUG();
-#if 1
-       if (--current->lock_depth < 0)
-               spin_unlock(&kernel_flag);
-#else
-       __asm__ __volatile__(
-               "decl %1\n\t"
-               "jns 9f\n\t"
-               spin_unlock_string
-               "\n9:"
-               :"=m" (__dummy_lock(&kernel_flag)),
-                "=m" (current->lock_depth));
-#endif
-}
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/socket.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/socket.h
deleted file mode 100644 (file)
index fbcc44d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef _ASM_SOCKET_H
-#define _ASM_SOCKET_H
-
-#include <asm/sockios.h>
-
-/* For setsockoptions(2) */
-#define SOL_SOCKET     1
-
-#define SO_DEBUG       1
-#define SO_REUSEADDR   2
-#define SO_TYPE                3
-#define SO_ERROR       4
-#define SO_DONTROUTE   5
-#define SO_BROADCAST   6
-#define SO_SNDBUF      7
-#define SO_RCVBUF      8
-#define SO_KEEPALIVE   9
-#define SO_OOBINLINE   10
-#define SO_NO_CHECK    11
-#define SO_PRIORITY    12
-#define SO_LINGER      13
-#define SO_BSDCOMPAT   14
-/* To add :#define SO_REUSEPORT 15 */
-#define SO_PASSCRED    16
-#define SO_PEERCRED    17
-#define SO_RCVLOWAT    18
-#define SO_SNDLOWAT    19
-#define SO_RCVTIMEO    20
-#define SO_SNDTIMEO    21
-
-/* Security levels - as per NRL IPv6 - don't actually do anything */
-#define SO_SECURITY_AUTHENTICATION             22
-#define SO_SECURITY_ENCRYPTION_TRANSPORT       23
-#define SO_SECURITY_ENCRYPTION_NETWORK         24
-
-#define SO_BINDTODEVICE        25
-
-/* Socket filtering */
-#define SO_ATTACH_FILTER        26
-#define SO_DETACH_FILTER        27
-
-#define SO_PEERNAME            28
-#define SO_TIMESTAMP           29
-#define SCM_TIMESTAMP          SO_TIMESTAMP
-
-#define SO_ACCEPTCONN          30
-
-/* Nasty libc5 fixup - bletch */
-#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
-/* Socket types. */
-#define SOCK_STREAM    1               /* stream (connection) socket   */
-#define SOCK_DGRAM     2               /* datagram (conn.less) socket  */
-#define SOCK_RAW       3               /* raw socket                   */
-#define SOCK_RDM       4               /* reliably-delivered message   */
-#define SOCK_SEQPACKET 5               /* sequential packet socket     */
-#define SOCK_PACKET    10              /* linux specific way of        */
-                                       /* getting packets at the dev   */
-                                       /* level.  For writing rarp and */
-                                       /* other similar things on the  */
-                                       /* user level.                  */
-#define        SOCK_MAX        (SOCK_PACKET+1)
-#endif
-
-#endif /* _ASM_SOCKET_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/sockios.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/sockios.h
deleted file mode 100644 (file)
index 6b747f8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __ARCH_I386_SOCKIOS__
-#define __ARCH_I386_SOCKIOS__
-
-/* Socket-level I/O control calls. */
-#define FIOSETOWN      0x8901
-#define SIOCSPGRP      0x8902
-#define FIOGETOWN      0x8903
-#define SIOCGPGRP      0x8904
-#define SIOCATMARK     0x8905
-#define SIOCGSTAMP     0x8906          /* Get stamp */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/softirq.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/softirq.h
deleted file mode 100644 (file)
index 2542244..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef __ASM_SOFTIRQ_H
-#define __ASM_SOFTIRQ_H
-
-#include <asm/atomic.h>
-#include <asm/hardirq.h>
-
-#define __cpu_bh_enable(cpu) \
-               do { barrier(); local_bh_count(cpu)--; } while (0)
-#define cpu_bh_disable(cpu) \
-               do { local_bh_count(cpu)++; barrier(); } while (0)
-
-#define local_bh_disable()     cpu_bh_disable(smp_processor_id())
-#define __local_bh_enable()    __cpu_bh_enable(smp_processor_id())
-
-#define in_softirq() (local_bh_count(smp_processor_id()) != 0)
-
-/*
- * NOTE: this assembly code assumes:
- *
- *    (char *)&local_bh_count - 8 == (char *)&softirq_pending
- *
- * If you change the offsets in irq_stat then you have to
- * update this code as well.
- */
-#define local_bh_enable()                                              \
-do {                                                                   \
-       unsigned int *ptr = &local_bh_count(smp_processor_id());        \
-                                                                       \
-       barrier();                                                      \
-       if (!--*ptr)                                                    \
-               __asm__ __volatile__ (                                  \
-                       "cmpl $0, -8(%0);"                              \
-                       "jnz 2f;"                                       \
-                       "1:;"                                           \
-                                                                       \
-                       ".section .text.lock,\"ax\";"                   \
-                       "2: pushl %%eax; pushl %%ecx; pushl %%edx;"     \
-                       "call %c1;"                                     \
-                       "popl %%edx; popl %%ecx; popl %%eax;"           \
-                       "jmp 1b;"                                       \
-                       ".previous;"                                    \
-                                                                       \
-               : /* no output */                                       \
-               : "r" (ptr), "i" (do_softirq)                           \
-               /* no registers clobbered */ );                         \
-} while (0)
-
-#endif /* __ASM_SOFTIRQ_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/spinlock.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/spinlock.h
deleted file mode 100644 (file)
index dbdd68b..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-#ifndef __ASM_SPINLOCK_H
-#define __ASM_SPINLOCK_H
-
-#include <asm/atomic.h>
-#include <asm/rwlock.h>
-#include <asm/page.h>
-#include <linux/config.h>
-
-extern int printk(const char * fmt, ...)
-       __attribute__ ((format (printf, 1, 2)));
-
-/* It seems that people are forgetting to
- * initialize their spinlocks properly, tsk tsk.
- * Remember to turn this off in 2.4. -ben
- */
-#if defined(CONFIG_DEBUG_SPINLOCK)
-#define SPINLOCK_DEBUG 1
-#else
-#define SPINLOCK_DEBUG 0
-#endif
-
-/*
- * Your basic SMP spinlocks, allowing only a single CPU anywhere
- */
-
-typedef struct {
-       volatile unsigned int lock;
-#if SPINLOCK_DEBUG
-       unsigned magic;
-#endif
-} spinlock_t;
-
-#define SPINLOCK_MAGIC 0xdead4ead
-
-#if SPINLOCK_DEBUG
-#define SPINLOCK_MAGIC_INIT    , SPINLOCK_MAGIC
-#else
-#define SPINLOCK_MAGIC_INIT    /* */
-#endif
-
-#define SPIN_LOCK_UNLOCKED (spinlock_t) { 1 SPINLOCK_MAGIC_INIT }
-
-#define spin_lock_init(x)      do { *(x) = SPIN_LOCK_UNLOCKED; } while(0)
-
-/*
- * Simple spin lock operations.  There are two variants, one clears IRQ's
- * on the local processor, one does not.
- *
- * We make no fairness assumptions. They have a cost.
- */
-
-#define spin_is_locked(x)      (*(volatile char *)(&(x)->lock) <= 0)
-#define spin_unlock_wait(x)    do { barrier(); } while(spin_is_locked(x))
-
-#define spin_lock_string \
-       "\n1:\t" \
-       "lock ; decb %0\n\t" \
-       "js 2f\n" \
-       ".section .text.lock,\"ax\"\n" \
-       "2:\t" \
-       "cmpb $0,%0\n\t" \
-       "rep;nop\n\t" \
-       "jle 2b\n\t" \
-       "jmp 1b\n" \
-       ".previous"
-
-/*
- * This works. Despite all the confusion.
- * (except on PPro SMP or if we are using OOSTORE)
- * (PPro errata 66, 92)
- */
-#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE)
-
-#define spin_unlock_string \
-       "movb $1,%0" \
-               :"=m" (lock->lock) : : "memory"
-
-
-static inline void spin_unlock(spinlock_t *lock)
-{
-#if SPINLOCK_DEBUG
-       if (lock->magic != SPINLOCK_MAGIC)
-               BUG();
-       if (!spin_is_locked(lock))
-               BUG();
-#endif
-       __asm__ __volatile__(
-               spin_unlock_string
-       );
-}
-
-#else
-
-#define spin_unlock_string \
-       "xchgb %b0, %1" \
-               :"=q" (oldval), "=m" (lock->lock) \
-               :"0" (oldval) : "memory"
-
-static inline void spin_unlock(spinlock_t *lock)
-{
-       char oldval = 1;
-#if SPINLOCK_DEBUG
-       if (lock->magic != SPINLOCK_MAGIC)
-               BUG();
-       if (!spin_is_locked(lock))
-               BUG();
-#endif
-       __asm__ __volatile__(
-               spin_unlock_string
-       );
-}
-
-#endif
-
-static inline int spin_trylock(spinlock_t *lock)
-{
-       char oldval;
-       __asm__ __volatile__(
-               "xchgb %b0,%1"
-               :"=q" (oldval), "=m" (lock->lock)
-               :"0" (0) : "memory");
-       return oldval > 0;
-}
-
-static inline void spin_lock(spinlock_t *lock)
-{
-#if SPINLOCK_DEBUG
-       __label__ here;
-here:
-       if (lock->magic != SPINLOCK_MAGIC) {
-printk("eip: %p\n", &&here);
-               BUG();
-       }
-#endif
-       __asm__ __volatile__(
-               spin_lock_string
-               :"=m" (lock->lock) : : "memory");
-}
-
-
-/*
- * Read-write spinlocks, allowing multiple readers
- * but only one writer.
- *
- * NOTE! it is quite common to have readers in interrupts
- * but no interrupt writers. For those circumstances we
- * can "mix" irq-safe locks - any writer needs to get a
- * irq-safe write-lock, but readers can get non-irqsafe
- * read-locks.
- */
-typedef struct {
-       volatile unsigned int lock;
-#if SPINLOCK_DEBUG
-       unsigned magic;
-#endif
-} rwlock_t;
-
-#define RWLOCK_MAGIC   0xdeaf1eed
-
-#if SPINLOCK_DEBUG
-#define RWLOCK_MAGIC_INIT      , RWLOCK_MAGIC
-#else
-#define RWLOCK_MAGIC_INIT      /* */
-#endif
-
-#define RW_LOCK_UNLOCKED (rwlock_t) { RW_LOCK_BIAS RWLOCK_MAGIC_INIT }
-
-#define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0)
-
-/*
- * On x86, we implement read-write locks as a 32-bit counter
- * with the high bit (sign) being the "contended" bit.
- *
- * The inline assembly is non-obvious. Think about it.
- *
- * Changed to use the same technique as rw semaphores.  See
- * semaphore.h for details.  -ben
- */
-/* the spinlock helpers are in arch/i386/kernel/semaphore.c */
-
-static inline void read_lock(rwlock_t *rw)
-{
-#if SPINLOCK_DEBUG
-       if (rw->magic != RWLOCK_MAGIC)
-               BUG();
-#endif
-       __build_read_lock(rw, "__read_lock_failed");
-}
-
-static inline void write_lock(rwlock_t *rw)
-{
-#if SPINLOCK_DEBUG
-       if (rw->magic != RWLOCK_MAGIC)
-               BUG();
-#endif
-       __build_write_lock(rw, "__write_lock_failed");
-}
-
-#define read_unlock(rw)                asm volatile("lock ; incl %0" :"=m" ((rw)->lock) : : "memory")
-#define write_unlock(rw)       asm volatile("lock ; addl $" RW_LOCK_BIAS_STR ",%0":"=m" ((rw)->lock) : : "memory")
-
-static inline int write_trylock(rwlock_t *lock)
-{
-       atomic_t *count = (atomic_t *)lock;
-       if (atomic_sub_and_test(RW_LOCK_BIAS, count))
-               return 1;
-       atomic_add(RW_LOCK_BIAS, count);
-       return 0;
-}
-
-#endif /* __ASM_SPINLOCK_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/stat.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/stat.h
deleted file mode 100644 (file)
index ef16311..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef _I386_STAT_H
-#define _I386_STAT_H
-
-struct __old_kernel_stat {
-       unsigned short st_dev;
-       unsigned short st_ino;
-       unsigned short st_mode;
-       unsigned short st_nlink;
-       unsigned short st_uid;
-       unsigned short st_gid;
-       unsigned short st_rdev;
-       unsigned long  st_size;
-       unsigned long  st_atime;
-       unsigned long  st_mtime;
-       unsigned long  st_ctime;
-};
-
-struct stat {
-       unsigned short st_dev;
-       unsigned short __pad1;
-       unsigned long st_ino;
-       unsigned short st_mode;
-       unsigned short st_nlink;
-       unsigned short st_uid;
-       unsigned short st_gid;
-       unsigned short st_rdev;
-       unsigned short __pad2;
-       unsigned long  st_size;
-       unsigned long  st_blksize;
-       unsigned long  st_blocks;
-       unsigned long  st_atime;
-       unsigned long  __unused1;
-       unsigned long  st_mtime;
-       unsigned long  __unused2;
-       unsigned long  st_ctime;
-       unsigned long  __unused3;
-       unsigned long  __unused4;
-       unsigned long  __unused5;
-};
-
-/* This matches struct stat64 in glibc2.1, hence the absolutely
- * insane amounts of padding around dev_t's.
- */
-struct stat64 {
-       unsigned short  st_dev;
-       unsigned char   __pad0[10];
-
-#define STAT64_HAS_BROKEN_ST_INO       1
-       unsigned long   __st_ino;
-
-       unsigned int    st_mode;
-       unsigned int    st_nlink;
-
-       unsigned long   st_uid;
-       unsigned long   st_gid;
-
-       unsigned short  st_rdev;
-       unsigned char   __pad3[10];
-
-       long long       st_size;
-       unsigned long   st_blksize;
-
-       unsigned long   st_blocks;      /* Number 512-byte blocks allocated. */
-       unsigned long   __pad4;         /* future possible st_blocks high bits */
-
-       unsigned long   st_atime;
-       unsigned long   __pad5;
-
-       unsigned long   st_mtime;
-       unsigned long   __pad6;
-
-       unsigned long   st_ctime;
-       unsigned long   __pad7;         /* will be high 32 bits of ctime someday */
-
-       unsigned long long      st_ino;
-};
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/statfs.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/statfs.h
deleted file mode 100644 (file)
index 113d5d4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _I386_STATFS_H
-#define _I386_STATFS_H
-
-#ifndef __KERNEL_STRICT_NAMES
-
-#include <linux/types.h>
-
-typedef __kernel_fsid_t        fsid_t;
-
-#endif
-
-struct statfs {
-       long f_type;
-       long f_bsize;
-       long f_blocks;
-       long f_bfree;
-       long f_bavail;
-       long f_files;
-       long f_ffree;
-       __kernel_fsid_t f_fsid;
-       long f_namelen;
-       long f_spare[6];
-};
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/string-486.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/string-486.h
deleted file mode 100644 (file)
index 51bfd05..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-#ifndef _I386_STRING_I486_H_
-#define _I386_STRING_I486_H_
-
-/*
- * This string-include defines all string functions as inline
- * functions. Use gcc. It also assumes ds=es=data space, this should be
- * normal. Most of the string-functions are rather heavily hand-optimized,
- * see especially strtok,strstr,str[c]spn. They should work, but are not
- * very easy to understand. Everything is done entirely within the register
- * set, making the functions fast and clean. 
- *
- *             Copyright (C) 1991, 1992 Linus Torvalds
- *             Revised and optimized for i486/pentium
- *             1994/03/15 by Alberto Vignani/Davide Parodi @crf.it
- *
- *     Split into 2 CPU specific files by Alan Cox to keep #ifdef noise down.
- *
- *     1999/10/5       Proper register args for newer GCCs and minor bugs
- *                     fixed - Petko Manolov (petkan@spct.net)
- *     1999/10/14      3DNow memscpy() added - Petkan
- *     2000/05/09      extern changed to static in function definitions
- *                     and a few cleanups - Petkan
- */
-
-#define __HAVE_ARCH_STRCPY
-static inline char * strcpy(char * dest,const char *src)
-{
-register char *tmp= (char *)dest;
-register char dummy;
-__asm__ __volatile__(
-       "\n1:\t"
-       "movb (%0),%2\n\t"
-       "incl %0\n\t"
-       "movb %2,(%1)\n\t"
-       "incl %1\n\t"
-       "testb %2,%2\n\t"
-       "jne 1b"
-       :"=r" (src), "=r" (tmp), "=q" (dummy)
-       :"0" (src), "1" (tmp)
-       :"memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRNCPY
-static inline char * strncpy(char * dest,const char *src,size_t count)
-{
-register char *tmp= (char *)dest;
-register char dummy;
-if (count) {
-__asm__ __volatile__(
-       "\n1:\t"
-       "movb (%0),%2\n\t"
-       "incl %0\n\t"
-       "movb %2,(%1)\n\t"
-       "incl %1\n\t"
-       "decl %3\n\t"
-       "je 3f\n\t"
-       "testb %2,%2\n\t"
-       "jne 1b\n\t"
-       "2:\tmovb %2,(%1)\n\t"
-       "incl %1\n\t"
-       "decl %3\n\t"
-       "jne 2b\n\t"
-       "3:"
-       :"=r" (src), "=r" (tmp), "=q" (dummy), "=r" (count)
-       :"0" (src), "1" (tmp), "3" (count)
-       :"memory");
-    } /* if (count) */
-return dest;
-}
-
-#define __HAVE_ARCH_STRCAT
-static inline char * strcat(char * dest,const char * src)
-{
-register char *tmp = (char *)(dest-1);
-register char dummy;
-__asm__ __volatile__(
-       "\n1:\tincl %1\n\t"
-       "cmpb $0,(%1)\n\t"
-       "jne 1b\n"
-       "2:\tmovb (%2),%b0\n\t"
-       "incl %2\n\t"
-       "movb %b0,(%1)\n\t"
-       "incl %1\n\t"
-       "testb %b0,%b0\n\t"
-       "jne 2b\n"
-       :"=q" (dummy), "=r" (tmp), "=r" (src)
-       :"1"  (tmp), "2"  (src)
-       :"memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRNCAT
-static inline char * strncat(char * dest,const char * src,size_t count)
-{
-register char *tmp = (char *)(dest-1);
-register char dummy;
-__asm__ __volatile__(
-       "\n1:\tincl %1\n\t"
-       "cmpb $0,(%1)\n\t"
-       "jne 1b\n"
-       "2:\tdecl %3\n\t"
-       "js 3f\n\t"
-       "movb (%2),%b0\n\t"
-       "incl %2\n\t"
-       "movb %b0,(%1)\n\t"
-       "incl %1\n\t"
-       "testb %b0,%b0\n\t"
-       "jne 2b\n"
-       "3:\txorb %0,%0\n\t"
-       "movb %b0,(%1)\n\t"
-       :"=q" (dummy), "=r" (tmp), "=r" (src), "=r" (count)
-       :"1"  (tmp), "2"  (src), "3"  (count)
-       :"memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRCMP
-static inline int strcmp(const char * cs,const char * ct)
-{
-register int __res;
-__asm__ __volatile__(
-       "\n1:\tmovb (%1),%b0\n\t"
-       "incl %1\n\t"
-       "cmpb %b0,(%2)\n\t"
-       "jne 2f\n\t"
-       "incl %2\n\t"
-       "testb %b0,%b0\n\t"
-       "jne 1b\n\t"
-       "xorl %0,%0\n\t"
-       "jmp 3f\n"
-       "2:\tmovl $1,%0\n\t"
-       "jb 3f\n\t"
-       "negl %0\n"
-       "3:"
-       :"=q" (__res), "=r" (cs), "=r" (ct)
-       :"1" (cs), "2" (ct)
-       : "memory" );
-return __res;
-}
-
-#define __HAVE_ARCH_STRNCMP
-static inline int strncmp(const char * cs,const char * ct,size_t count)
-{
-register int __res;
-__asm__ __volatile__(
-       "\n1:\tdecl %3\n\t"
-       "js 2f\n\t"
-       "movb (%1),%b0\n\t"
-       "incl %1\n\t"
-       "cmpb %b0,(%2)\n\t"
-       "jne 3f\n\t"
-       "incl %2\n\t"
-       "testb %b0,%b0\n\t"
-       "jne 1b\n"
-       "2:\txorl %0,%0\n\t"
-       "jmp 4f\n"
-       "3:\tmovl $1,%0\n\t"
-       "jb 4f\n\t"
-       "negl %0\n"
-       "4:"
-       :"=q" (__res), "=r" (cs), "=r" (ct), "=r" (count)
-       :"1"  (cs), "2"  (ct),  "3" (count));
-return __res;
-}
-
-#define __HAVE_ARCH_STRCHR
-static inline char * strchr(const char * s, int c)
-{
-register char * __res;
-__asm__ __volatile__(
-       "movb %%al,%%ah\n"
-       "1:\tmovb (%1),%%al\n\t"
-       "cmpb %%ah,%%al\n\t"
-       "je 2f\n\t"
-       "incl %1\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b\n\t"
-       "xorl %1,%1\n"
-       "2:\tmovl %1,%0\n\t"
-       :"=a" (__res), "=r" (s)
-       :"0" (c),      "1"  (s));
-return __res;
-}
-
-#define __HAVE_ARCH_STRRCHR
-static inline char * strrchr(const char * s, int c)
-{
-int    d0, d1;
-register char * __res;
-__asm__ __volatile__(
-       "movb %%al,%%ah\n"
-       "1:\tlodsb\n\t"
-       "cmpb %%ah,%%al\n\t"
-       "jne 2f\n\t"
-       "leal -1(%%esi),%0\n"
-       "2:\ttestb %%al,%%al\n\t"
-       "jne 1b"
-       :"=d" (__res), "=&S" (d0), "=&a" (d1)
-       :"0" (0), "1" (s), "2" (c));
-return __res;
-}
-
-
-#define __HAVE_ARCH_STRCSPN
-static inline size_t strcspn(const char * cs, const char * ct)
-{
-int    d0, d1;
-register char * __res;
-__asm__ __volatile__(
-       "movl %6,%%edi\n\t"
-       "repne\n\t"
-       "scasb\n\t"
-       "notl %%ecx\n\t"
-       "decl %%ecx\n\t"
-       "movl %%ecx,%%edx\n"
-       "1:\tlodsb\n\t"
-       "testb %%al,%%al\n\t"
-       "je 2f\n\t"
-       "movl %6,%%edi\n\t"
-       "movl %%edx,%%ecx\n\t"
-       "repne\n\t"
-       "scasb\n\t"
-       "jne 1b\n"
-       "2:\tdecl %0"
-       :"=S" (__res), "=&a" (d0), "=&c" (d1)
-       :"0" (cs), "1" (0), "2" (0xffffffff), "g" (ct)
-       :"dx", "di");
-return __res-cs;
-}
-
-
-#define __HAVE_ARCH_STRLEN
-static inline size_t strlen(const char * s)
-{
-/*
- * slightly slower on a 486, but with better chances of
- * register allocation
- */
-register char dummy, *tmp= (char *)s;
-__asm__ __volatile__(
-       "\n1:\t"
-       "movb\t(%0),%1\n\t"
-       "incl\t%0\n\t"
-       "testb\t%1,%1\n\t"
-       "jne\t1b"
-       :"=r" (tmp),"=q" (dummy)
-       :"0" (s)
-       : "memory" );
-return (tmp-s-1);
-}
-
-/* Added by Gertjan van Wingerde to make minix and sysv module work */
-#define __HAVE_ARCH_STRNLEN
-static inline size_t strnlen(const char * s, size_t count)
-{
-int    d0;
-register int __res;
-__asm__ __volatile__(
-       "movl %3,%0\n\t"
-       "jmp 2f\n"
-       "1:\tcmpb $0,(%0)\n\t"
-       "je 3f\n\t"
-       "incl %0\n"
-       "2:\tdecl %2\n\t"
-       "cmpl $-1,%2\n\t"
-       "jne 1b\n"
-       "3:\tsubl %3,%0"
-       :"=a" (__res), "=&d" (d0)
-       :"1" (count), "c" (s));
-return __res;
-}
-/* end of additional stuff */
-
-
-/*
- *     These ought to get tweaked to do some cache priming.
- */
-static inline void * __memcpy_by4(void * to, const void * from, size_t n)
-{
-register void *tmp = (void *)to;
-register int dummy1,dummy2;
-__asm__ __volatile__ (
-       "\n1:\tmovl (%2),%0\n\t"
-       "addl $4,%2\n\t"
-       "movl %0,(%1)\n\t"
-       "addl $4,%1\n\t"
-       "decl %3\n\t"
-       "jnz 1b"
-       :"=r" (dummy1), "=r" (tmp), "=r" (from), "=r" (dummy2) 
-       :"1" (tmp), "2" (from), "3" (n/4)
-       :"memory");
-return (to);
-}
-
-static inline void * __memcpy_by2(void * to, const void * from, size_t n)
-{
-register void *tmp = (void *)to;
-register int dummy1,dummy2;
-__asm__ __volatile__ (
-       "shrl $1,%3\n\t"
-       "jz 2f\n"                 /* only a word */
-       "1:\tmovl (%2),%0\n\t"
-       "addl $4,%2\n\t"
-       "movl %0,(%1)\n\t"
-       "addl $4,%1\n\t"
-       "decl %3\n\t"
-       "jnz 1b\n"
-       "2:\tmovw (%2),%w0\n\t"
-       "movw %w0,(%1)"
-       :"=r" (dummy1), "=r" (tmp), "=r" (from), "=r" (dummy2) 
-       :"1" (tmp), "2" (from), "3" (n/2)
-       :"memory");
-return (to);
-}
-
-static inline void * __memcpy_g(void * to, const void * from, size_t n)
-{
-int    d0, d1, d2;
-register void *tmp = (void *)to;
-__asm__ __volatile__ (
-       "shrl $1,%%ecx\n\t"
-       "jnc 1f\n\t"
-       "movsb\n"
-       "1:\tshrl $1,%%ecx\n\t"
-       "jnc 2f\n\t"
-       "movsw\n"
-       "2:\trep\n\t"
-       "movsl"
-       :"=&c" (d0), "=&D" (d1), "=&S" (d2)
-       :"0" (n), "1" ((long) tmp), "2" ((long) from)
-       :"memory");
-return (to);
-}
-
-#define __memcpy_c(d,s,count) \
-((count%4==0) ? \
- __memcpy_by4((d),(s),(count)) : \
- ((count%2==0) ? \
-  __memcpy_by2((d),(s),(count)) : \
-  __memcpy_g((d),(s),(count))))
-  
-#define __memcpy(d,s,count) \
-(__builtin_constant_p(count) ? \
- __memcpy_c((d),(s),(count)) : \
- __memcpy_g((d),(s),(count)))
-#define __HAVE_ARCH_MEMCPY
-
-#include <linux/config.h>
-
-#ifdef CONFIG_X86_USE_3DNOW
-
-#include <asm/mmx.h>
-
-/*
-**      This CPU favours 3DNow strongly (eg AMD K6-II, K6-III, Athlon)
-*/
-
-static inline void * __constant_memcpy3d(void * to, const void * from, size_t len)
-{
-       if (len < 512)
-               return __memcpy_c(to, from, len);
-       return _mmx_memcpy(to, from, len);
-}
-
-static inline void *__memcpy3d(void *to, const void *from, size_t len)
-{
-       if(len < 512)
-               return __memcpy_g(to, from, len);
-       return _mmx_memcpy(to, from, len);
-}
-
-#define memcpy(d, s, count) \
-(__builtin_constant_p(count) ? \
- __constant_memcpy3d((d),(s),(count)) : \
- __memcpy3d((d),(s),(count)))
-#else /* CONFIG_X86_USE_3DNOW */
-
-/*
-**     Generic routines
-*/
-
-
-#define memcpy(d, s, count) __memcpy(d, s, count)
-
-#endif /* CONFIG_X86_USE_3DNOW */ 
-
-
-extern void __struct_cpy_bug( void );
-
-#define struct_cpy(x,y)                                \
-({                                             \
-       if (sizeof(*(x)) != sizeof(*(y)))       \
-               __struct_cpy_bug;               \
-       memcpy(x, y, sizeof(*(x)));             \
-})
-
-
-#define __HAVE_ARCH_MEMMOVE
-static inline void * memmove(void * dest,const void * src, size_t n)
-{
-int    d0, d1, d2;
-register void *tmp = (void *)dest;
-if (dest<src)
-__asm__ __volatile__ (
-       "rep\n\t"
-       "movsb"
-       :"=&c" (d0), "=&S" (d1), "=&D" (d2)
-       :"0" (n), "1" (src), "2" (tmp)
-       :"memory");
-else
-__asm__ __volatile__ (
-       "std\n\t"
-       "rep\n\t"
-       "movsb\n\t"
-       "cld"
-       :"=&c" (d0), "=&S" (d1), "=&D" (d2)
-       :"0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)tmp)
-       :"memory");
-return dest;
-}
-
-
-#define        __HAVE_ARCH_MEMCMP
-static inline int memcmp(const void * cs,const void * ct,size_t count)
-{
-int    d0, d1, d2;
-register int __res;
-__asm__ __volatile__(
-       "repe\n\t"
-       "cmpsb\n\t"
-       "je 1f\n\t"
-       "sbbl %0,%0\n\t"
-       "orb $1,%b0\n"
-       "1:"
-       :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
-       :"0" (0), "1" (cs), "2" (ct), "3" (count));
-return __res;
-}
-
-
-#define __HAVE_ARCH_MEMCHR
-static inline void * memchr(const void * cs,int c,size_t count)
-{
-int    d0;
-register void * __res;
-if (!count)
-       return NULL;
-__asm__ __volatile__(
-       "repne\n\t"
-       "scasb\n\t"
-       "je 1f\n\t"
-       "movl $1,%0\n"
-       "1:\tdecl %0"
-       :"=D" (__res), "=&c" (d0)
-       :"a" (c), "0" (cs), "1" (count));
-return __res;
-}
-
-#define __memset_cc(s,c,count) \
-((count%4==0) ? \
- __memset_cc_by4((s),(c),(count)) : \
- ((count%2==0) ? \
-  __memset_cc_by2((s),(c),(count)) : \
-  __memset_cg((s),(c),(count))))
-
-#define __memset_gc(s,c,count) \
-((count%4==0) ? \
- __memset_gc_by4((s),(c),(count)) : \
- ((count%2==0) ? \
-  __memset_gc_by2((s),(c),(count)) : \
-  __memset_gg((s),(c),(count))))
-
-#define __HAVE_ARCH_MEMSET
-#define memset(s,c,count) \
-(__builtin_constant_p(c) ? \
- (__builtin_constant_p(count) ? \
-  __memset_cc((s),(c),(count)) : \
-  __memset_cg((s),(c),(count))) : \
- (__builtin_constant_p(count) ? \
-  __memset_gc((s),(c),(count)) : \
-  __memset_gg((s),(c),(count))))
-
-static inline void * __memset_cc_by4(void * s, char c, size_t count)
-{
-/*
- * register char *tmp = s;
- */
-register char *tmp = (char *)s;
-register int  dummy;
-__asm__ __volatile__ (
-       "\n1:\tmovl %2,(%0)\n\t"
-       "addl $4,%0\n\t"
-       "decl %1\n\t"
-       "jnz 1b"
-       :"=r" (tmp), "=r" (dummy)
-       :"q" (0x01010101UL * (unsigned char) c), "0" (tmp), "1" (count/4)
-       :"memory");
-return s;
-}
-
-static inline void * __memset_cc_by2(void * s, char c, size_t count)
-{
-register void *tmp = (void *)s;
-register int  dummy;
-__asm__ __volatile__ (
-       "shrl $1,%1\n\t"          /* may be divisible also by 4 */
-       "jz 2f\n"
-       "\n1:\tmovl %2,(%0)\n\t"
-       "addl $4,%0\n\t"
-       "decl %1\n\t"
-       "jnz 1b\n"
-       "2:\tmovw %w2,(%0)"
-       :"=r" (tmp), "=r" (dummy)
-       :"q" (0x01010101UL * (unsigned char) c), "0" (tmp), "1" (count/2)
-       :"memory");
-return s;
-}
-
-static inline void * __memset_gc_by4(void * s, char c, size_t count)
-{
-register void *tmp = (void *)s;
-register int dummy;
-__asm__ __volatile__ (
-       "movb %b0,%h0\n"
-       "pushw %w0\n\t"
-       "shll $16,%0\n\t"
-       "popw %w0\n"
-       "1:\tmovl %0,(%1)\n\t"
-       "addl $4,%1\n\t"
-       "decl %2\n\t"
-       "jnz 1b\n"
-       :"=q" (c), "=r" (tmp), "=r" (dummy)
-       :"0" ((unsigned) c),  "1"  (tmp), "2" (count/4)
-       :"memory");
-return s;
-}
-
-static inline void * __memset_gc_by2(void * s, char c, size_t count)
-{
-register void *tmp = (void *)s;
-register int dummy1,dummy2;
-__asm__ __volatile__ (
-       "movb %b0,%h0\n\t"
-       "shrl $1,%2\n\t"          /* may be divisible also by 4 */
-       "jz 2f\n\t"
-       "pushw %w0\n\t"
-       "shll $16,%0\n\t"
-       "popw %w0\n"
-       "1:\tmovl %0,(%1)\n\t"
-       "addl $4,%1\n\t"
-       "decl %2\n\t"
-       "jnz 1b\n"
-       "2:\tmovw %w0,(%1)"
-       :"=q" (dummy1), "=r" (tmp), "=r" (dummy2)
-       :"0" ((unsigned) c),  "1"  (tmp), "2" (count/2)
-       :"memory");
-return s;
-}
-
-static inline void * __memset_cg(void * s, char c, size_t count)
-{
-int    d0, d1;
-register void *tmp = (void *)s;
-__asm__ __volatile__ (
-       "shrl $1,%%ecx\n\t"
-       "rep\n\t"
-       "stosw\n\t"
-       "jnc 1f\n\t"
-       "movb %%al,(%%edi)\n"
-       "1:"
-       :"=&c" (d0), "=&D" (d1) 
-       :"a" (0x0101U * (unsigned char) c), "0" (count), "1" (tmp)
-       :"memory");
-return s;
-}
-
-static inline void * __memset_gg(void * s,char c,size_t count)
-{
-int    d0, d1, d2;
-register void *tmp = (void *)s;
-__asm__ __volatile__ (
-       "movb %%al,%%ah\n\t"
-       "shrl $1,%%ecx\n\t"
-       "rep\n\t"
-       "stosw\n\t"
-       "jnc 1f\n\t"
-       "movb %%al,(%%edi)\n"
-       "1:"
-       :"=&c" (d0), "=&D" (d1), "=&D" (d2)
-       :"0" (count), "1" (tmp), "2" (c)
-       :"memory");
-return s;
-}
-
-
-/*
- * find the first occurrence of byte 'c', or 1 past the area if none
- */
-#define __HAVE_ARCH_MEMSCAN
-static inline void * memscan(void * addr, int c, size_t size)
-{
-       if (!size)
-               return addr;
-       __asm__("repnz; scasb
-               jnz 1f
-               dec %%edi
-1:             "
-               : "=D" (addr), "=c" (size)
-               : "0" (addr), "1" (size), "a" (c));
-       return addr;
-}
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/string.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/string.h
deleted file mode 100644 (file)
index d4d7899..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-#ifndef _I386_STRING_H_
-#define _I386_STRING_H_
-
-#ifdef __KERNEL__
-#include <linux/config.h>
-/*
- * On a 486 or Pentium, we are better off not using the
- * byte string operations. But on a 386 or a PPro the
- * byte string ops are faster than doing it by hand
- * (MUCH faster on a Pentium).
- *
- * Also, the byte strings actually work correctly. Forget
- * the i486 routines for now as they may be broken..
- */
-#if FIXED_486_STRING && defined(CONFIG_X86_USE_STRING_486)
-#include <asm/string-486.h>
-#else
-
-/*
- * This string-include defines all string functions as inline
- * functions. Use gcc. It also assumes ds=es=data space, this should be
- * normal. Most of the string-functions are rather heavily hand-optimized,
- * see especially strtok,strstr,str[c]spn. They should work, but are not
- * very easy to understand. Everything is done entirely within the register
- * set, making the functions fast and clean. String instructions have been
- * used through-out, making for "slightly" unclear code :-)
- *
- *             NO Copyright (C) 1991, 1992 Linus Torvalds,
- *             consider these trivial functions to be PD.
- */
-
-#define __HAVE_ARCH_STRCPY
-static inline char * strcpy(char * dest,const char *src)
-{
-int d0, d1, d2;
-__asm__ __volatile__(
-       "1:\tlodsb\n\t"
-       "stosb\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b"
-       : "=&S" (d0), "=&D" (d1), "=&a" (d2)
-       :"0" (src),"1" (dest) : "memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRNCPY
-static inline char * strncpy(char * dest,const char *src,size_t count)
-{
-int d0, d1, d2, d3;
-__asm__ __volatile__(
-       "1:\tdecl %2\n\t"
-       "js 2f\n\t"
-       "lodsb\n\t"
-       "stosb\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b\n\t"
-       "rep\n\t"
-       "stosb\n"
-       "2:"
-       : "=&S" (d0), "=&D" (d1), "=&c" (d2), "=&a" (d3)
-       :"0" (src),"1" (dest),"2" (count) : "memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRCAT
-static inline char * strcat(char * dest,const char * src)
-{
-int d0, d1, d2, d3;
-__asm__ __volatile__(
-       "repne\n\t"
-       "scasb\n\t"
-       "decl %1\n"
-       "1:\tlodsb\n\t"
-       "stosb\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b"
-       : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3)
-       : "0" (src), "1" (dest), "2" (0), "3" (0xffffffff):"memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRNCAT
-static inline char * strncat(char * dest,const char * src,size_t count)
-{
-int d0, d1, d2, d3;
-__asm__ __volatile__(
-       "repne\n\t"
-       "scasb\n\t"
-       "decl %1\n\t"
-       "movl %8,%3\n"
-       "1:\tdecl %3\n\t"
-       "js 2f\n\t"
-       "lodsb\n\t"
-       "stosb\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b\n"
-       "2:\txorl %2,%2\n\t"
-       "stosb"
-       : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3)
-       : "0" (src),"1" (dest),"2" (0),"3" (0xffffffff), "g" (count)
-       : "memory");
-return dest;
-}
-
-#define __HAVE_ARCH_STRCMP
-static inline int strcmp(const char * cs,const char * ct)
-{
-int d0, d1;
-register int __res;
-__asm__ __volatile__(
-       "1:\tlodsb\n\t"
-       "scasb\n\t"
-       "jne 2f\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b\n\t"
-       "xorl %%eax,%%eax\n\t"
-       "jmp 3f\n"
-       "2:\tsbbl %%eax,%%eax\n\t"
-       "orb $1,%%al\n"
-       "3:"
-       :"=a" (__res), "=&S" (d0), "=&D" (d1)
-                    :"1" (cs),"2" (ct));
-return __res;
-}
-
-#define __HAVE_ARCH_STRNCMP
-static inline int strncmp(const char * cs,const char * ct,size_t count)
-{
-register int __res;
-int d0, d1, d2;
-__asm__ __volatile__(
-       "1:\tdecl %3\n\t"
-       "js 2f\n\t"
-       "lodsb\n\t"
-       "scasb\n\t"
-       "jne 3f\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b\n"
-       "2:\txorl %%eax,%%eax\n\t"
-       "jmp 4f\n"
-       "3:\tsbbl %%eax,%%eax\n\t"
-       "orb $1,%%al\n"
-       "4:"
-                    :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
-                    :"1" (cs),"2" (ct),"3" (count));
-return __res;
-}
-
-#define __HAVE_ARCH_STRCHR
-static inline char * strchr(const char * s, int c)
-{
-int d0;
-register char * __res;
-__asm__ __volatile__(
-       "movb %%al,%%ah\n"
-       "1:\tlodsb\n\t"
-       "cmpb %%ah,%%al\n\t"
-       "je 2f\n\t"
-       "testb %%al,%%al\n\t"
-       "jne 1b\n\t"
-       "movl $1,%1\n"
-       "2:\tmovl %1,%0\n\t"
-       "decl %0"
-       :"=a" (__res), "=&S" (d0) : "1" (s),"0" (c));
-return __res;
-}
-
-#define __HAVE_ARCH_STRRCHR
-static inline char * strrchr(const char * s, int c)
-{
-int d0, d1;
-register char * __res;
-__asm__ __volatile__(
-       "movb %%al,%%ah\n"
-       "1:\tlodsb\n\t"
-       "cmpb %%ah,%%al\n\t"
-       "jne 2f\n\t"
-       "leal -1(%%esi),%0\n"
-       "2:\ttestb %%al,%%al\n\t"
-       "jne 1b"
-       :"=g" (__res), "=&S" (d0), "=&a" (d1) :"0" (0),"1" (s),"2" (c));
-return __res;
-}
-
-#define __HAVE_ARCH_STRLEN
-static inline size_t strlen(const char * s)
-{
-int d0;
-register int __res;
-__asm__ __volatile__(
-       "repne\n\t"
-       "scasb\n\t"
-       "notl %0\n\t"
-       "decl %0"
-       :"=c" (__res), "=&D" (d0) :"1" (s),"a" (0), "0" (0xffffffff));
-return __res;
-}
-
-static inline void * __memcpy(void * to, const void * from, size_t n)
-{
-int d0, d1, d2;
-__asm__ __volatile__(
-       "rep ; movsl\n\t"
-       "testb $2,%b4\n\t"
-       "je 1f\n\t"
-       "movsw\n"
-       "1:\ttestb $1,%b4\n\t"
-       "je 2f\n\t"
-       "movsb\n"
-       "2:"
-       : "=&c" (d0), "=&D" (d1), "=&S" (d2)
-       :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
-       : "memory");
-return (to);
-}
-
-/*
- * This looks horribly ugly, but the compiler can optimize it totally,
- * as the count is constant.
- */
-static inline void * __constant_memcpy(void * to, const void * from, size_t n)
-{
-       switch (n) {
-               case 0:
-                       return to;
-               case 1:
-                       *(unsigned char *)to = *(const unsigned char *)from;
-                       return to;
-               case 2:
-                       *(unsigned short *)to = *(const unsigned short *)from;
-                       return to;
-               case 3:
-                       *(unsigned short *)to = *(const unsigned short *)from;
-                       *(2+(unsigned char *)to) = *(2+(const unsigned char *)from);
-                       return to;
-               case 4:
-                       *(unsigned long *)to = *(const unsigned long *)from;
-                       return to;
-               case 6: /* for Ethernet addresses */
-                       *(unsigned long *)to = *(const unsigned long *)from;
-                       *(2+(unsigned short *)to) = *(2+(const unsigned short *)from);
-                       return to;
-               case 8:
-                       *(unsigned long *)to = *(const unsigned long *)from;
-                       *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
-                       return to;
-               case 12:
-                       *(unsigned long *)to = *(const unsigned long *)from;
-                       *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
-                       *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
-                       return to;
-               case 16:
-                       *(unsigned long *)to = *(const unsigned long *)from;
-                       *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
-                       *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
-                       *(3+(unsigned long *)to) = *(3+(const unsigned long *)from);
-                       return to;
-               case 20:
-                       *(unsigned long *)to = *(const unsigned long *)from;
-                       *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
-                       *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
-                       *(3+(unsigned long *)to) = *(3+(const unsigned long *)from);
-                       *(4+(unsigned long *)to) = *(4+(const unsigned long *)from);
-                       return to;
-       }
-#define COMMON(x) \
-__asm__ __volatile__( \
-       "rep ; movsl" \
-       x \
-       : "=&c" (d0), "=&D" (d1), "=&S" (d2) \
-       : "0" (n/4),"1" ((long) to),"2" ((long) from) \
-       : "memory");
-{
-       int d0, d1, d2;
-       switch (n % 4) {
-               case 0: COMMON(""); return to;
-               case 1: COMMON("\n\tmovsb"); return to;
-               case 2: COMMON("\n\tmovsw"); return to;
-               default: COMMON("\n\tmovsw\n\tmovsb"); return to;
-       }
-}
-  
-#undef COMMON
-}
-
-#define __HAVE_ARCH_MEMCPY
-
-#ifdef CONFIG_X86_USE_3DNOW
-
-#include <asm/mmx.h>
-
-/*
- *     This CPU favours 3DNow strongly (eg AMD Athlon)
- */
-
-static inline void * __constant_memcpy3d(void * to, const void * from, size_t len)
-{
-       if (len < 512)
-               return __constant_memcpy(to, from, len);
-       return _mmx_memcpy(to, from, len);
-}
-
-static __inline__ void *__memcpy3d(void *to, const void *from, size_t len)
-{
-       if (len < 512)
-               return __memcpy(to, from, len);
-       return _mmx_memcpy(to, from, len);
-}
-
-#define memcpy(t, f, n) \
-(__builtin_constant_p(n) ? \
- __constant_memcpy3d((t),(f),(n)) : \
- __memcpy3d((t),(f),(n)))
-
-#else
-
-/*
- *     No 3D Now!
- */
-#define memcpy(t, f, n) \
-(__builtin_constant_p(n) ? \
- __constant_memcpy((t),(f),(n)) : \
- __memcpy((t),(f),(n)))
-
-#endif
-
-/*
- * struct_cpy(x,y), copy structure *x into (matching structure) *y.
- *
- * We get link-time errors if the structure sizes do not match.
- * There is no runtime overhead, it's all optimized away at
- * compile time.
- */
-extern void __struct_cpy_bug (void);
-
-#define struct_cpy(x,y)                        \
-({                                             \
-       if (sizeof(*(x)) != sizeof(*(y)))       \
-               __struct_cpy_bug;               \
-       memcpy(x, y, sizeof(*(x)));             \
-})
-
-#define __HAVE_ARCH_MEMMOVE
-static inline void * memmove(void * dest,const void * src, size_t n)
-{
-int d0, d1, d2;
-if (dest<src)
-__asm__ __volatile__(
-       "rep\n\t"
-       "movsb"
-       : "=&c" (d0), "=&S" (d1), "=&D" (d2)
-       :"0" (n),"1" (src),"2" (dest)
-       : "memory");
-else
-__asm__ __volatile__(
-       "std\n\t"
-       "rep\n\t"
-       "movsb\n\t"
-       "cld"
-       : "=&c" (d0), "=&S" (d1), "=&D" (d2)
-       :"0" (n),
-        "1" (n-1+(const char *)src),
-        "2" (n-1+(char *)dest)
-       :"memory");
-return dest;
-}
-
-#define memcmp __builtin_memcmp
-
-#define __HAVE_ARCH_MEMCHR
-static inline void * memchr(const void * cs,int c,size_t count)
-{
-int d0;
-register void * __res;
-if (!count)
-       return NULL;
-__asm__ __volatile__(
-       "repne\n\t"
-       "scasb\n\t"
-       "je 1f\n\t"
-       "movl $1,%0\n"
-       "1:\tdecl %0"
-       :"=D" (__res), "=&c" (d0) : "a" (c),"0" (cs),"1" (count));
-return __res;
-}
-
-static inline void * __memset_generic(void * s, char c,size_t count)
-{
-int d0, d1;
-__asm__ __volatile__(
-       "rep\n\t"
-       "stosb"
-       : "=&c" (d0), "=&D" (d1)
-       :"a" (c),"1" (s),"0" (count)
-       :"memory");
-return s;
-}
-
-/* we might want to write optimized versions of these later */
-#define __constant_count_memset(s,c,count) __memset_generic((s),(c),(count))
-
-/*
- * memset(x,0,y) is a reasonably common thing to do, so we want to fill
- * things 32 bits at a time even when we don't know the size of the
- * area at compile-time..
- */
-static inline void * __constant_c_memset(void * s, unsigned long c, size_t count)
-{
-int d0, d1;
-__asm__ __volatile__(
-       "rep ; stosl\n\t"
-       "testb $2,%b3\n\t"
-       "je 1f\n\t"
-       "stosw\n"
-       "1:\ttestb $1,%b3\n\t"
-       "je 2f\n\t"
-       "stosb\n"
-       "2:"
-       : "=&c" (d0), "=&D" (d1)
-       :"a" (c), "q" (count), "0" (count/4), "1" ((long) s)
-       :"memory");
-return (s);    
-}
-
-/* Added by Gertjan van Wingerde to make minix and sysv module work */
-#define __HAVE_ARCH_STRNLEN
-static inline size_t strnlen(const char * s, size_t count)
-{
-int d0;
-register int __res;
-__asm__ __volatile__(
-       "movl %2,%0\n\t"
-       "jmp 2f\n"
-       "1:\tcmpb $0,(%0)\n\t"
-       "je 3f\n\t"
-       "incl %0\n"
-       "2:\tdecl %1\n\t"
-       "cmpl $-1,%1\n\t"
-       "jne 1b\n"
-       "3:\tsubl %2,%0"
-       :"=a" (__res), "=&d" (d0)
-       :"c" (s),"1" (count));
-return __res;
-}
-/* end of additional stuff */
-
-#define __HAVE_ARCH_STRSTR
-
-extern char *strstr(const char *cs, const char *ct);
-
-/*
- * This looks horribly ugly, but the compiler can optimize it totally,
- * as we by now know that both pattern and count is constant..
- */
-static inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count)
-{
-       switch (count) {
-               case 0:
-                       return s;
-               case 1:
-                       *(unsigned char *)s = pattern;
-                       return s;
-               case 2:
-                       *(unsigned short *)s = pattern;
-                       return s;
-               case 3:
-                       *(unsigned short *)s = pattern;
-                       *(2+(unsigned char *)s) = pattern;
-                       return s;
-               case 4:
-                       *(unsigned long *)s = pattern;
-                       return s;
-       }
-#define COMMON(x) \
-__asm__  __volatile__( \
-       "rep ; stosl" \
-       x \
-       : "=&c" (d0), "=&D" (d1) \
-       : "a" (pattern),"0" (count/4),"1" ((long) s) \
-       : "memory")
-{
-       int d0, d1;
-       switch (count % 4) {
-               case 0: COMMON(""); return s;
-               case 1: COMMON("\n\tstosb"); return s;
-               case 2: COMMON("\n\tstosw"); return s;
-               default: COMMON("\n\tstosw\n\tstosb"); return s;
-       }
-}
-  
-#undef COMMON
-}
-
-#define __constant_c_x_memset(s, c, count) \
-(__builtin_constant_p(count) ? \
- __constant_c_and_count_memset((s),(c),(count)) : \
- __constant_c_memset((s),(c),(count)))
-
-#define __memset(s, c, count) \
-(__builtin_constant_p(count) ? \
- __constant_count_memset((s),(c),(count)) : \
- __memset_generic((s),(c),(count)))
-
-#define __HAVE_ARCH_MEMSET
-#define memset(s, c, count) \
-(__builtin_constant_p(c) ? \
- __constant_c_x_memset((s),(0x01010101UL*(unsigned char)(c)),(count)) : \
- __memset((s),(c),(count)))
-
-/*
- * find the first occurrence of byte 'c', or 1 past the area if none
- */
-#define __HAVE_ARCH_MEMSCAN
-static inline void * memscan(void * addr, int c, size_t size)
-{
-       if (!size)
-               return addr;
-       __asm__("repnz; scasb\n\t"
-               "jnz 1f\n\t"
-               "dec %%edi\n"
-               "1:"
-               : "=D" (addr), "=c" (size)
-               : "0" (addr), "1" (size), "a" (c));
-       return addr;
-}
-
-#endif /* CONFIG_X86_USE_STRING_486 */
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/system.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/system.h
deleted file mode 100644 (file)
index 6091708..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-#ifndef __ASM_SYSTEM_H
-#define __ASM_SYSTEM_H
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <asm/segment.h>
-#include <asm/hypervisor.h>
-#include <linux/bitops.h> /* for LOCK_PREFIX */
-
-#ifdef __KERNEL__
-
-struct task_struct;    /* one of the stranger aspects of C forward declarations.. */
-extern void FASTCALL(__switch_to(struct task_struct *prev, struct task_struct *next));
-
-#define prepare_to_switch()    do { } while(0)
-#define switch_to(prev,next,last) do {                                 \
-       asm volatile("pushl %%esi\n\t"                                  \
-                    "pushl %%edi\n\t"                                  \
-                    "pushl %%ebp\n\t"                                  \
-                    "movl %%esp,%0\n\t"        /* save ESP */          \
-                    "movl %3,%%esp\n\t"        /* restore ESP */       \
-                    "movl $1f,%1\n\t"          /* save EIP */          \
-                    "pushl %4\n\t"             /* restore EIP */       \
-                    "jmp __switch_to\n"                                \
-                    "1:\t"                                             \
-                    "popl %%ebp\n\t"                                   \
-                    "popl %%edi\n\t"                                   \
-                    "popl %%esi\n\t"                                   \
-                    :"=m" (prev->thread.esp),"=m" (prev->thread.eip),  \
-                     "=b" (last)                                       \
-                    :"m" (next->thread.esp),"m" (next->thread.eip),    \
-                     "a" (prev), "d" (next),                           \
-                     "b" (prev));                                      \
-} while (0)
-
-#define _set_base(addr,base) do { unsigned long __pr; \
-__asm__ __volatile__ ("movw %%dx,%1\n\t" \
-       "rorl $16,%%edx\n\t" \
-       "movb %%dl,%2\n\t" \
-       "movb %%dh,%3" \
-       :"=&d" (__pr) \
-       :"m" (*((addr)+2)), \
-        "m" (*((addr)+4)), \
-        "m" (*((addr)+7)), \
-         "0" (base) \
-        ); } while(0)
-
-#define _set_limit(addr,limit) do { unsigned long __lr; \
-__asm__ __volatile__ ("movw %%dx,%1\n\t" \
-       "rorl $16,%%edx\n\t" \
-       "movb %2,%%dh\n\t" \
-       "andb $0xf0,%%dh\n\t" \
-       "orb %%dh,%%dl\n\t" \
-       "movb %%dl,%2" \
-       :"=&d" (__lr) \
-       :"m" (*(addr)), \
-        "m" (*((addr)+6)), \
-        "0" (limit) \
-        ); } while(0)
-
-#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) )
-#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1)>>12 )
-
-static inline unsigned long _get_base(char * addr)
-{
-       unsigned long __base;
-       __asm__("movb %3,%%dh\n\t"
-               "movb %2,%%dl\n\t"
-               "shll $16,%%edx\n\t"
-               "movw %1,%%dx"
-               :"=&d" (__base)
-               :"m" (*((addr)+2)),
-                "m" (*((addr)+4)),
-                "m" (*((addr)+7)));
-       return __base;
-}
-
-#define get_base(ldt) _get_base( ((char *)&(ldt)) )
-
-/*
- * Load a segment. Fall back on loading the zero
- * segment if something goes wrong..
- */
-#define loadsegment(seg,value)                 \
-       asm volatile("\n"                       \
-               "1:\t"                          \
-               "movl %0,%%" #seg "\n"          \
-               "2:\n"                          \
-               ".section .fixup,\"ax\"\n"      \
-               "3:\t"                          \
-               "pushl $0\n\t"                  \
-               "popl %%" #seg "\n\t"           \
-               "jmp 2b\n"                      \
-               ".previous\n"                   \
-               ".section __ex_table,\"a\"\n\t" \
-               ".align 4\n\t"                  \
-               ".long 1b,3b\n"                 \
-               ".previous"                     \
-               : :"m" (*(unsigned int *)&(value)))
-
-#define clts() ((void)0)
-#define read_cr0() ({ \
-       unsigned int __dummy; \
-       __asm__( \
-               "movl %%cr0,%0\n\t" \
-               :"=r" (__dummy)); \
-       __dummy; \
-})
-#define write_cr0(x) \
-       __asm__("movl %0,%%cr0": :"r" (x));
-
-#define read_cr4() ({ \
-       unsigned int __dummy; \
-       __asm__( \
-               "movl %%cr4,%0\n\t" \
-               :"=r" (__dummy)); \
-       __dummy; \
-})
-#define write_cr4(x) \
-       __asm__("movl %0,%%cr4": :"r" (x));
-#define stts() (HYPERVISOR_fpu_taskswitch())
-
-#endif /* __KERNEL__ */
-
-#define wbinvd() \
-       __asm__ __volatile__ ("wbinvd": : :"memory");
-
-static inline unsigned long get_limit(unsigned long segment)
-{
-       unsigned long __limit;
-       __asm__("lsll %1,%0"
-               :"=r" (__limit):"r" (segment));
-       return __limit+1;
-}
-
-#define nop() __asm__ __volatile__ ("nop")
-
-#define xchg(ptr,v) ((__typeof__(*(ptr)))__xchg((unsigned long)(v),(ptr),sizeof(*(ptr))))
-
-#define tas(ptr) (xchg((ptr),1))
-
-struct __xchg_dummy { unsigned long a[100]; };
-#define __xg(x) ((struct __xchg_dummy *)(x))
-
-
-/*
- * The semantics of XCHGCMP8B are a bit strange, this is why
- * there is a loop and the loading of %%eax and %%edx has to
- * be inside. This inlines well in most cases, the cached
- * cost is around ~38 cycles. (in the future we might want
- * to do an SIMD/3DNOW!/MMX/FPU 64-bit store here, but that
- * might have an implicit FPU-save as a cost, so it's not
- * clear which path to go.)
- */
-static inline void __set_64bit (unsigned long long * ptr,
-               unsigned int low, unsigned int high)
-{
-       __asm__ __volatile__ (
-               "\n1:\t"
-               "movl (%0), %%eax\n\t"
-               "movl 4(%0), %%edx\n\t"
-               "cmpxchg8b (%0)\n\t"
-               "jnz 1b"
-               : /* no outputs */
-               :       "D"(ptr),
-                       "b"(low),
-                       "c"(high)
-               :       "ax","dx","memory");
-}
-
-static inline void __set_64bit_constant (unsigned long long *ptr,
-                                                unsigned long long value)
-{
-       __set_64bit(ptr,(unsigned int)(value), (unsigned int)((value)>>32ULL));
-}
-#define ll_low(x)      *(((unsigned int*)&(x))+0)
-#define ll_high(x)     *(((unsigned int*)&(x))+1)
-
-static inline void __set_64bit_var (unsigned long long *ptr,
-                        unsigned long long value)
-{
-       __set_64bit(ptr,ll_low(value), ll_high(value));
-}
-
-#define set_64bit(ptr,value) \
-(__builtin_constant_p(value) ? \
- __set_64bit_constant(ptr, value) : \
- __set_64bit_var(ptr, value) )
-
-#define _set_64bit(ptr,value) \
-(__builtin_constant_p(value) ? \
- __set_64bit(ptr, (unsigned int)(value), (unsigned int)((value)>>32ULL) ) : \
- __set_64bit(ptr, ll_low(value), ll_high(value)) )
-
-/*
- * Note: no "lock" prefix even on SMP: xchg always implies lock anyway
- * Note 2: xchg has side effect, so that attribute volatile is necessary,
- *       but generally the primitive is invalid, *ptr is output argument. --ANK
- */
-static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
-{
-       switch (size) {
-               case 1:
-                       __asm__ __volatile__("xchgb %b0,%1"
-                               :"=q" (x)
-                               :"m" (*__xg(ptr)), "0" (x)
-                               :"memory");
-                       break;
-               case 2:
-                       __asm__ __volatile__("xchgw %w0,%1"
-                               :"=r" (x)
-                               :"m" (*__xg(ptr)), "0" (x)
-                               :"memory");
-                       break;
-               case 4:
-                       __asm__ __volatile__("xchgl %0,%1"
-                               :"=r" (x)
-                               :"m" (*__xg(ptr)), "0" (x)
-                               :"memory");
-                       break;
-       }
-       return x;
-}
-
-/*
- * Atomic compare and exchange.  Compare OLD with MEM, if identical,
- * store NEW in MEM.  Return the initial value in MEM.  Success is
- * indicated by comparing RETURN with OLD.
- */
-
-#ifdef CONFIG_X86_CMPXCHG
-#define __HAVE_ARCH_CMPXCHG 1
-
-static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
-                                     unsigned long new, int size)
-{
-       unsigned long prev;
-       switch (size) {
-       case 1:
-               __asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2"
-                                    : "=a"(prev)
-                                    : "q"(new), "m"(*__xg(ptr)), "0"(old)
-                                    : "memory");
-               return prev;
-       case 2:
-               __asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2"
-                                    : "=a"(prev)
-                                    : "q"(new), "m"(*__xg(ptr)), "0"(old)
-                                    : "memory");
-               return prev;
-       case 4:
-               __asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2"
-                                    : "=a"(prev)
-                                    : "q"(new), "m"(*__xg(ptr)), "0"(old)
-                                    : "memory");
-               return prev;
-       }
-       return old;
-}
-
-#define cmpxchg(ptr,o,n)\
-       ((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o),\
-                                       (unsigned long)(n),sizeof(*(ptr))))
-    
-#else
-/* Compiling for a 386 proper. Is it worth implementing via cli/sti?  */
-#endif
-
-/*
- * Force strict CPU ordering.
- * And yes, this is required on UP too when we're talking
- * to devices.
- *
- * For now, "wmb()" doesn't actually do anything, as all
- * Intel CPU's follow what Intel calls a *Processor Order*,
- * in which all writes are seen in the program order even
- * outside the CPU.
- *
- * I expect future Intel CPU's to have a weaker ordering,
- * but I'd also expect them to finally get their act together
- * and add some real memory barriers if so.
- *
- * Some non intel clones support out of order store. wmb() ceases to be a
- * nop for these.
- */
-#define mb()   __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")
-#define rmb()  mb()
-
-#ifdef CONFIG_X86_OOSTORE
-#define wmb()  __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")
-#else
-#define wmb()  __asm__ __volatile__ ("": : :"memory")
-#endif
-
-#ifdef CONFIG_SMP
-#define smp_mb()       mb()
-#define smp_rmb()      rmb()
-#define smp_wmb()      wmb()
-#else
-#define smp_mb()       barrier()
-#define smp_rmb()      barrier()
-#define smp_wmb()      barrier()
-#endif
-
-#define set_mb(var, value) do { xchg(&var, value); } while (0)
-#define set_wmb(var, value) do { var = value; wmb(); } while (0)
-
-#define __save_flags(x)                ((x) = HYPERVISOR_shared_info->events_enable); barrier()
-#define __restore_flags(x)                           \
-do {                                                  \
-    shared_info_t *_shared = HYPERVISOR_shared_info;  \
-    _shared->events_enable = (x);                     \
-    barrier();                                        \
-    if ( _shared->events && (x) ) do_hypervisor_callback(NULL);  \
-} while (0)
-#define __cli()                (HYPERVISOR_shared_info->events_enable = 0); barrier()
-#define __sti()                                      \
-do {                                                  \
-    shared_info_t *_shared = HYPERVISOR_shared_info;  \
-    _shared->events_enable = 1;                       \
-    barrier();                                        \
-    if ( _shared->events ) do_hypervisor_callback(NULL);  \
-} while (0)
-#define safe_halt()            ((void)0)
-
-/* For spinlocks etc */
-#define local_irq_save(x)      ((x) = HYPERVISOR_shared_info->events_enable); (HYPERVISOR_shared_info->events_enable = 0); barrier()
-#define local_irq_restore(x)   __restore_flags(x)
-#define local_irq_disable()    __cli()
-#define local_irq_enable()     __sti()
-
-#ifdef CONFIG_SMP
-
-extern void __global_cli(void);
-extern void __global_sti(void);
-extern unsigned long __global_save_flags(void);
-extern void __global_restore_flags(unsigned long);
-#define cli() __global_cli()
-#define sti() __global_sti()
-#define save_flags(x) ((x)=__global_save_flags())
-#define restore_flags(x) __global_restore_flags(x)
-
-#else
-
-#define cli() __cli()
-#define sti() __sti()
-#define save_flags(x) __save_flags(x)
-#define restore_flags(x) __restore_flags(x)
-
-#endif
-
-/*
- * disable hlt during certain critical i/o operations
- */
-#define HAVE_DISABLE_HLT
-void disable_hlt(void);
-void enable_hlt(void);
-
-extern unsigned long dmi_broken;
-extern int is_sony_vaio_laptop;
-
-#define BROKEN_ACPI_Sx         0x0001
-#define BROKEN_INIT_AFTER_S1   0x0002
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/termbits.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/termbits.h
deleted file mode 100644 (file)
index 5ccd7d8..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#ifndef __ARCH_I386_TERMBITS_H__
-#define __ARCH_I386_TERMBITS_H__
-
-#include <linux/posix_types.h>
-
-typedef unsigned char  cc_t;
-typedef unsigned int   speed_t;
-typedef unsigned int   tcflag_t;
-
-#define NCCS 19
-struct termios {
-       tcflag_t c_iflag;               /* input mode flags */
-       tcflag_t c_oflag;               /* output mode flags */
-       tcflag_t c_cflag;               /* control mode flags */
-       tcflag_t c_lflag;               /* local mode flags */
-       cc_t c_line;                    /* line discipline */
-       cc_t c_cc[NCCS];                /* control characters */
-};
-
-/* c_cc characters */
-#define VINTR 0
-#define VQUIT 1
-#define VERASE 2
-#define VKILL 3
-#define VEOF 4
-#define VTIME 5
-#define VMIN 6
-#define VSWTC 7
-#define VSTART 8
-#define VSTOP 9
-#define VSUSP 10
-#define VEOL 11
-#define VREPRINT 12
-#define VDISCARD 13
-#define VWERASE 14
-#define VLNEXT 15
-#define VEOL2 16
-
-/* c_iflag bits */
-#define IGNBRK 0000001
-#define BRKINT 0000002
-#define IGNPAR 0000004
-#define PARMRK 0000010
-#define INPCK  0000020
-#define ISTRIP 0000040
-#define INLCR  0000100
-#define IGNCR  0000200
-#define ICRNL  0000400
-#define IUCLC  0001000
-#define IXON   0002000
-#define IXANY  0004000
-#define IXOFF  0010000
-#define IMAXBEL        0020000
-
-/* c_oflag bits */
-#define OPOST  0000001
-#define OLCUC  0000002
-#define ONLCR  0000004
-#define OCRNL  0000010
-#define ONOCR  0000020
-#define ONLRET 0000040
-#define OFILL  0000100
-#define OFDEL  0000200
-#define NLDLY  0000400
-#define   NL0  0000000
-#define   NL1  0000400
-#define CRDLY  0003000
-#define   CR0  0000000
-#define   CR1  0001000
-#define   CR2  0002000
-#define   CR3  0003000
-#define TABDLY 0014000
-#define   TAB0 0000000
-#define   TAB1 0004000
-#define   TAB2 0010000
-#define   TAB3 0014000
-#define   XTABS        0014000
-#define BSDLY  0020000
-#define   BS0  0000000
-#define   BS1  0020000
-#define VTDLY  0040000
-#define   VT0  0000000
-#define   VT1  0040000
-#define FFDLY  0100000
-#define   FF0  0000000
-#define   FF1  0100000
-
-/* c_cflag bit meaning */
-#define CBAUD  0010017
-#define  B0    0000000         /* hang up */
-#define  B50   0000001
-#define  B75   0000002
-#define  B110  0000003
-#define  B134  0000004
-#define  B150  0000005
-#define  B200  0000006
-#define  B300  0000007
-#define  B600  0000010
-#define  B1200 0000011
-#define  B1800 0000012
-#define  B2400 0000013
-#define  B4800 0000014
-#define  B9600 0000015
-#define  B19200        0000016
-#define  B38400        0000017
-#define EXTA B19200
-#define EXTB B38400
-#define CSIZE  0000060
-#define   CS5  0000000
-#define   CS6  0000020
-#define   CS7  0000040
-#define   CS8  0000060
-#define CSTOPB 0000100
-#define CREAD  0000200
-#define PARENB 0000400
-#define PARODD 0001000
-#define HUPCL  0002000
-#define CLOCAL 0004000
-#define CBAUDEX 0010000
-#define    B57600 0010001
-#define   B115200 0010002
-#define   B230400 0010003
-#define   B460800 0010004
-#define   B500000 0010005
-#define   B576000 0010006
-#define   B921600 0010007
-#define  B1000000 0010010
-#define  B1152000 0010011
-#define  B1500000 0010012
-#define  B2000000 0010013
-#define  B2500000 0010014
-#define  B3000000 0010015
-#define  B3500000 0010016
-#define  B4000000 0010017
-#define CIBAUD   002003600000  /* input baud rate (not used) */
-#define CMSPAR   010000000000          /* mark or space (stick) parity */
-#define CRTSCTS          020000000000          /* flow control */
-
-/* c_lflag bits */
-#define ISIG   0000001
-#define ICANON 0000002
-#define XCASE  0000004
-#define ECHO   0000010
-#define ECHOE  0000020
-#define ECHOK  0000040
-#define ECHONL 0000100
-#define NOFLSH 0000200
-#define TOSTOP 0000400
-#define ECHOCTL        0001000
-#define ECHOPRT        0002000
-#define ECHOKE 0004000
-#define FLUSHO 0010000
-#define PENDIN 0040000
-#define IEXTEN 0100000
-
-/* tcflow() and TCXONC use these */
-#define        TCOOFF          0
-#define        TCOON           1
-#define        TCIOFF          2
-#define        TCION           3
-
-/* tcflush() and TCFLSH use these */
-#define        TCIFLUSH        0
-#define        TCOFLUSH        1
-#define        TCIOFLUSH       2
-
-/* tcsetattr uses these */
-#define        TCSANOW         0
-#define        TCSADRAIN       1
-#define        TCSAFLUSH       2
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/termios.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/termios.h
deleted file mode 100644 (file)
index c4cc5c8..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-#ifndef _I386_TERMIOS_H
-#define _I386_TERMIOS_H
-
-#include <asm/termbits.h>
-#include <asm/ioctls.h>
-
-struct winsize {
-       unsigned short ws_row;
-       unsigned short ws_col;
-       unsigned short ws_xpixel;
-       unsigned short ws_ypixel;
-};
-
-#define NCC 8
-struct termio {
-       unsigned short c_iflag;         /* input mode flags */
-       unsigned short c_oflag;         /* output mode flags */
-       unsigned short c_cflag;         /* control mode flags */
-       unsigned short c_lflag;         /* local mode flags */
-       unsigned char c_line;           /* line discipline */
-       unsigned char c_cc[NCC];        /* control characters */
-};
-
-/* modem lines */
-#define TIOCM_LE       0x001
-#define TIOCM_DTR      0x002
-#define TIOCM_RTS      0x004
-#define TIOCM_ST       0x008
-#define TIOCM_SR       0x010
-#define TIOCM_CTS      0x020
-#define TIOCM_CAR      0x040
-#define TIOCM_RNG      0x080
-#define TIOCM_DSR      0x100
-#define TIOCM_CD       TIOCM_CAR
-#define TIOCM_RI       TIOCM_RNG
-#define TIOCM_OUT1     0x2000
-#define TIOCM_OUT2     0x4000
-#define TIOCM_LOOP     0x8000
-
-/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
-
-/* line disciplines */
-#define N_TTY          0
-#define N_SLIP         1
-#define N_MOUSE                2
-#define N_PPP          3
-#define N_STRIP                4
-#define N_AX25         5
-#define N_X25          6       /* X.25 async */
-#define N_6PACK                7
-#define N_MASC         8       /* Reserved for Mobitex module <kaz@cafe.net> */
-#define N_R3964                9       /* Reserved for Simatic R3964 module */
-#define N_PROFIBUS_FDL 10      /* Reserved for Profibus <Dave@mvhi.com> */
-#define N_IRDA         11      /* Linux IR - http://irda.sourceforge.net/ */
-#define N_SMSBLOCK     12      /* SMS block mode - for talking to GSM data cards about SMS messages */
-#define N_HDLC         13      /* synchronous HDLC */
-#define N_SYNC_PPP     14      /* synchronous PPP */
-#define N_HCI          15  /* Bluetooth HCI UART */
-
-#ifdef __KERNEL__
-
-/*     intr=^C         quit=^\         erase=del       kill=^U
-       eof=^D          vtime=\0        vmin=\1         sxtc=\0
-       start=^Q        stop=^S         susp=^Z         eol=\0
-       reprint=^R      discard=^U      werase=^W       lnext=^V
-       eol2=\0
-*/
-#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
-
-/*
- * Translate a "termio" structure into a "termios". Ugh.
- */
-#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \
-       unsigned short __tmp; \
-       get_user(__tmp,&(termio)->x); \
-       *(unsigned short *) &(termios)->x = __tmp; \
-}
-
-#define user_termio_to_kernel_termios(termios, termio) \
-({ \
-       SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \
-       SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \
-       SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \
-       SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \
-       copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
-})
-
-/*
- * Translate a "termios" structure into a "termio". Ugh.
- */
-#define kernel_termios_to_user_termio(termio, termios) \
-({ \
-       put_user((termios)->c_iflag, &(termio)->c_iflag); \
-       put_user((termios)->c_oflag, &(termio)->c_oflag); \
-       put_user((termios)->c_cflag, &(termio)->c_cflag); \
-       put_user((termios)->c_lflag, &(termio)->c_lflag); \
-       put_user((termios)->c_line,  &(termio)->c_line); \
-       copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
-})
-
-#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
-#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
-
-#endif /* __KERNEL__ */
-
-#endif /* _I386_TERMIOS_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/timex.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/timex.h
deleted file mode 100644 (file)
index 97099dd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * linux/include/asm-i386/timex.h
- *
- * i386 architecture timex specifications
- */
-#ifndef _ASMi386_TIMEX_H
-#define _ASMi386_TIMEX_H
-
-#include <linux/config.h>
-#include <asm/msr.h>
-
-#define CLOCK_TICK_RATE        1193180 /* Underlying HZ */
-#define CLOCK_TICK_FACTOR      20      /* Factor of both 1000000 and CLOCK_TICK_RATE */
-#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
-       (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
-               << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
-
-/*
- * Standard way to access the cycle counter on i586+ CPUs.
- * Currently only used on SMP.
- *
- * If you really have a SMP machine with i486 chips or older,
- * compile for that, and this will just always return zero.
- * That's ok, it just means that the nicer scheduling heuristics
- * won't work for you.
- *
- * We only use the low 32 bits, and we'd simply better make sure
- * that we reschedule before that wraps. Scheduling at least every
- * four billion cycles just basically sounds like a good idea,
- * regardless of how fast the machine is. 
- */
-typedef unsigned long long cycles_t;
-
-extern cycles_t cacheflush_time;
-
-static inline cycles_t get_cycles (void)
-{
-#ifndef CONFIG_X86_TSC
-       return 0;
-#else
-       unsigned long long ret;
-
-       rdtscll(ret);
-       return ret;
-#endif
-}
-
-extern unsigned long cpu_khz;
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/tlb.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/tlb.h
deleted file mode 100644 (file)
index 69c0faa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/tlb.h>
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/types.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/types.h
deleted file mode 100644 (file)
index 238635a..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef _I386_TYPES_H
-#define _I386_TYPES_H
-
-typedef unsigned short umode_t;
-
-/*
- * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
- * header files exported to user space
- */
-
-typedef __signed__ char __s8;
-typedef unsigned char __u8;
-
-typedef __signed__ short __s16;
-typedef unsigned short __u16;
-
-typedef __signed__ int __s32;
-typedef unsigned int __u32;
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-typedef __signed__ long long __s64;
-typedef unsigned long long __u64;
-#endif
-
-/*
- * These aren't exported outside the kernel to avoid name space clashes
- */
-#ifdef __KERNEL__
-
-#include <linux/config.h>
-
-typedef signed char s8;
-typedef unsigned char u8;
-
-typedef signed short s16;
-typedef unsigned short u16;
-
-typedef signed int s32;
-typedef unsigned int u32;
-
-typedef signed long long s64;
-typedef unsigned long long u64;
-
-#define BITS_PER_LONG 32
-
-/* DMA addresses come in generic and 64-bit flavours.  */
-
-#ifdef CONFIG_HIGHMEM
-typedef u64 dma_addr_t;
-#else
-typedef u32 dma_addr_t;
-#endif
-typedef u64 dma64_addr_t;
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/uaccess.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/uaccess.h
deleted file mode 100644 (file)
index ecc6693..0000000
+++ /dev/null
@@ -1,606 +0,0 @@
-#ifndef __i386_UACCESS_H
-#define __i386_UACCESS_H
-
-/*
- * User space memory access functions
- */
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/prefetch.h>
-#include <asm/page.h>
-
-#define VERIFY_READ 0
-#define VERIFY_WRITE 1
-
-/*
- * The fs value determines whether argument validity checking should be
- * performed or not.  If get_fs() == USER_DS, checking is performed, with
- * get_fs() == KERNEL_DS, checking is bypassed.
- *
- * For historical reasons, these macros are grossly misnamed.
- */
-
-#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
-
-
-#define KERNEL_DS      MAKE_MM_SEG(0xFFFFFFFF)
-#define USER_DS                MAKE_MM_SEG(PAGE_OFFSET)
-
-#define get_ds()       (KERNEL_DS)
-#define get_fs()       (current->addr_limit)
-#define set_fs(x)      (current->addr_limit = (x))
-
-#define segment_eq(a,b)        ((a).seg == (b).seg)
-
-extern int __verify_write(const void *, unsigned long);
-
-#define __addr_ok(addr) ((unsigned long)(addr) < (current->addr_limit.seg))
-
-/*
- * Uhhuh, this needs 33-bit arithmetic. We have a carry..
- */
-#define __range_ok(addr,size) ({ \
-       unsigned long flag,sum; \
-       asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \
-               :"=&r" (flag), "=r" (sum) \
-               :"1" (addr),"g" ((int)(size)),"g" (current->addr_limit.seg)); \
-       flag; })
-
-#ifdef CONFIG_X86_WP_WORKS_OK
-
-#define access_ok(type,addr,size) (__range_ok(addr,size) == 0)
-
-#else
-
-#define access_ok(type,addr,size) ( (__range_ok(addr,size) == 0) && \
-                        ((type) == VERIFY_READ || boot_cpu_data.wp_works_ok || \
-                        segment_eq(get_fs(),KERNEL_DS) || \
-                         __verify_write((void *)(addr),(size))))
-
-#endif
-
-static inline int verify_area(int type, const void * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
-
-/*
- * The exception table consists of pairs of addresses: the first is the
- * address of an instruction that is allowed to fault, and the second is
- * the address at which the program should continue.  No registers are
- * modified, so it is entirely up to the continuation code to figure out
- * what to do.
- *
- * All the routines below use bits of fixup code that are out of line
- * with the main instruction path.  This means when everything is well,
- * we don't even have to jump over them.  Further, they do not intrude
- * on our cache or tlb entries.
- */
-
-struct exception_table_entry
-{
-       unsigned long insn, fixup;
-};
-
-/* Returns 0 if exception not found and fixup otherwise.  */
-extern unsigned long search_exception_table(unsigned long);
-
-
-/*
- * These are the main single-value transfer routines.  They automatically
- * use the right size if we just have the right pointer type.
- *
- * This gets kind of ugly. We want to return _two_ values in "get_user()"
- * and yet we don't want to do any pointers, because that is too much
- * of a performance impact. Thus we have a few rather ugly macros here,
- * and hide all the uglyness from the user.
- *
- * The "__xxx" versions of the user access functions are versions that
- * do not verify the address space, that must have been done previously
- * with a separate "access_ok()" call (this is used when we do multiple
- * accesses to the same area of user memory).
- */
-
-extern void __get_user_1(void);
-extern void __get_user_2(void);
-extern void __get_user_4(void);
-
-#define __get_user_x(size,ret,x,ptr) \
-       __asm__ __volatile__("call __get_user_" #size \
-               :"=a" (ret),"=d" (x) \
-               :"0" (ptr))
-
-/* Careful: we have to cast the result to the type of the pointer for sign reasons */
-#define get_user(x,ptr)                                                        \
-({     int __ret_gu,__val_gu;                                          \
-       switch(sizeof (*(ptr))) {                                       \
-       case 1:  __get_user_x(1,__ret_gu,__val_gu,ptr); break;          \
-       case 2:  __get_user_x(2,__ret_gu,__val_gu,ptr); break;          \
-       case 4:  __get_user_x(4,__ret_gu,__val_gu,ptr); break;          \
-       default: __get_user_x(X,__ret_gu,__val_gu,ptr); break;          \
-       }                                                               \
-       (x) = (__typeof__(*(ptr)))__val_gu;                             \
-       __ret_gu;                                                       \
-})
-
-extern void __put_user_1(void);
-extern void __put_user_2(void);
-extern void __put_user_4(void);
-extern void __put_user_8(void);
-
-extern void __put_user_bad(void);
-
-#define put_user(x,ptr)                                                        \
-  __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
-
-#define __get_user(x,ptr) \
-  __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
-#define __put_user(x,ptr) \
-  __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
-
-#define __put_user_nocheck(x,ptr,size)                 \
-({                                                     \
-       long __pu_err;                                  \
-       __put_user_size((x),(ptr),(size),__pu_err);     \
-       __pu_err;                                       \
-})
-
-
-#define __put_user_check(x,ptr,size)                   \
-({                                                     \
-       long __pu_err = -EFAULT;                                        \
-       __typeof__(*(ptr)) *__pu_addr = (ptr);          \
-       if (access_ok(VERIFY_WRITE,__pu_addr,size))     \
-               __put_user_size((x),__pu_addr,(size),__pu_err); \
-       __pu_err;                                       \
-})                                                     
-
-#define __put_user_u64(x, addr, err)                           \
-       __asm__ __volatile__(                                   \
-               "1:     movl %%eax,0(%2)\n"                     \
-               "2:     movl %%edx,4(%2)\n"                     \
-               "3:\n"                                          \
-               ".section .fixup,\"ax\"\n"                      \
-               "4:     movl %3,%0\n"                           \
-               "       jmp 3b\n"                               \
-               ".previous\n"                                   \
-               ".section __ex_table,\"a\"\n"                   \
-               "       .align 4\n"                             \
-               "       .long 1b,4b\n"                          \
-               "       .long 2b,4b\n"                          \
-               ".previous"                                     \
-               : "=r"(err)                                     \
-               : "A" (x), "r" (addr), "i"(-EFAULT), "0"(err))
-
-#define __put_user_size(x,ptr,size,retval)                             \
-do {                                                                   \
-       retval = 0;                                                     \
-       switch (size) {                                                 \
-         case 1: __put_user_asm(x,ptr,retval,"b","b","iq"); break;     \
-         case 2: __put_user_asm(x,ptr,retval,"w","w","ir"); break;     \
-         case 4: __put_user_asm(x,ptr,retval,"l","","ir"); break;      \
-         case 8: __put_user_u64(x,ptr,retval); break;                  \
-         default: __put_user_bad();                                    \
-       }                                                               \
-} while (0)
-
-struct __large_struct { unsigned long buf[100]; };
-#define __m(x) (*(struct __large_struct *)(x))
-
-/*
- * Tell gcc we read from memory instead of writing: this is because
- * we do not write to any memory gcc knows about, so there are no
- * aliasing issues.
- */
-#define __put_user_asm(x, addr, err, itype, rtype, ltype)      \
-       __asm__ __volatile__(                                   \
-               "1:     mov"itype" %"rtype"1,%2\n"              \
-               "2:\n"                                          \
-               ".section .fixup,\"ax\"\n"                      \
-               "3:     movl %3,%0\n"                           \
-               "       jmp 2b\n"                               \
-               ".previous\n"                                   \
-               ".section __ex_table,\"a\"\n"                   \
-               "       .align 4\n"                             \
-               "       .long 1b,3b\n"                          \
-               ".previous"                                     \
-               : "=r"(err)                                     \
-               : ltype (x), "m"(__m(addr)), "i"(-EFAULT), "0"(err))
-
-
-#define __get_user_nocheck(x,ptr,size)                         \
-({                                                             \
-       long __gu_err, __gu_val;                                \
-       __get_user_size(__gu_val,(ptr),(size),__gu_err);        \
-       (x) = (__typeof__(*(ptr)))__gu_val;                     \
-       __gu_err;                                               \
-})
-
-extern long __get_user_bad(void);
-
-#define __get_user_size(x,ptr,size,retval)                             \
-do {                                                                   \
-       retval = 0;                                                     \
-       switch (size) {                                                 \
-         case 1: __get_user_asm(x,ptr,retval,"b","b","=q"); break;     \
-         case 2: __get_user_asm(x,ptr,retval,"w","w","=r"); break;     \
-         case 4: __get_user_asm(x,ptr,retval,"l","","=r"); break;      \
-         default: (x) = __get_user_bad();                              \
-       }                                                               \
-} while (0)
-
-#define __get_user_asm(x, addr, err, itype, rtype, ltype)      \
-       __asm__ __volatile__(                                   \
-               "1:     mov"itype" %2,%"rtype"1\n"              \
-               "2:\n"                                          \
-               ".section .fixup,\"ax\"\n"                      \
-               "3:     movl %3,%0\n"                           \
-               "       xor"itype" %"rtype"1,%"rtype"1\n"       \
-               "       jmp 2b\n"                               \
-               ".previous\n"                                   \
-               ".section __ex_table,\"a\"\n"                   \
-               "       .align 4\n"                             \
-               "       .long 1b,3b\n"                          \
-               ".previous"                                     \
-               : "=r"(err), ltype (x)                          \
-               : "m"(__m(addr)), "i"(-EFAULT), "0"(err))
-
-
-/*
- * Copy To/From Userspace
- */
-
-/* Generic arbitrary sized copy.  */
-#define __copy_user(to,from,size)                                      \
-do {                                                                   \
-       int __d0, __d1;                                                 \
-       __asm__ __volatile__(                                           \
-               "0:     rep; movsl\n"                                   \
-               "       movl %3,%0\n"                                   \
-               "1:     rep; movsb\n"                                   \
-               "2:\n"                                                  \
-               ".section .fixup,\"ax\"\n"                              \
-               "3:     lea 0(%3,%0,4),%0\n"                            \
-               "       jmp 2b\n"                                       \
-               ".previous\n"                                           \
-               ".section __ex_table,\"a\"\n"                           \
-               "       .align 4\n"                                     \
-               "       .long 0b,3b\n"                                  \
-               "       .long 1b,2b\n"                                  \
-               ".previous"                                             \
-               : "=&c"(size), "=&D" (__d0), "=&S" (__d1)               \
-               : "r"(size & 3), "0"(size / 4), "1"(to), "2"(from)      \
-               : "memory");                                            \
-} while (0)
-
-#define __copy_user_zeroing(to,from,size)                              \
-do {                                                                   \
-       int __d0, __d1;                                                 \
-       __asm__ __volatile__(                                           \
-               "0:     rep; movsl\n"                                   \
-               "       movl %3,%0\n"                                   \
-               "1:     rep; movsb\n"                                   \
-               "2:\n"                                                  \
-               ".section .fixup,\"ax\"\n"                              \
-               "3:     lea 0(%3,%0,4),%0\n"                            \
-               "4:     pushl %0\n"                                     \
-               "       pushl %%eax\n"                                  \
-               "       xorl %%eax,%%eax\n"                             \
-               "       rep; stosb\n"                                   \
-               "       popl %%eax\n"                                   \
-               "       popl %0\n"                                      \
-               "       jmp 2b\n"                                       \
-               ".previous\n"                                           \
-               ".section __ex_table,\"a\"\n"                           \
-               "       .align 4\n"                                     \
-               "       .long 0b,3b\n"                                  \
-               "       .long 1b,4b\n"                                  \
-               ".previous"                                             \
-               : "=&c"(size), "=&D" (__d0), "=&S" (__d1)               \
-               : "r"(size & 3), "0"(size / 4), "1"(to), "2"(from)      \
-               : "memory");                                            \
-} while (0)
-
-/* We let the __ versions of copy_from/to_user inline, because they're often
- * used in fast paths and have only a small space overhead.
- */
-static inline unsigned long
-__generic_copy_from_user_nocheck(void *to, const void *from, unsigned long n)
-{
-       __copy_user_zeroing(to,from,n);
-       return n;
-}
-
-static inline unsigned long
-__generic_copy_to_user_nocheck(void *to, const void *from, unsigned long n)
-{
-       __copy_user(to,from,n);
-       return n;
-}
-
-
-/* Optimize just a little bit when we know the size of the move. */
-#define __constant_copy_user(to, from, size)                   \
-do {                                                           \
-       int __d0, __d1;                                         \
-       switch (size & 3) {                                     \
-       default:                                                \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "2:     shl $2,%0\n"                    \
-                       "       jmp 1b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,2b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       case 1:                                                 \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:     movsb\n"                        \
-                       "2:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "3:     shl $2,%0\n"                    \
-                       "4:     incl %0\n"                      \
-                       "       jmp 2b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,3b\n"                  \
-                       "       .long 1b,4b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       case 2:                                                 \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:     movsw\n"                        \
-                       "2:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "3:     shl $2,%0\n"                    \
-                       "4:     addl $2,%0\n"                   \
-                       "       jmp 2b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,3b\n"                  \
-                       "       .long 1b,4b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       case 3:                                                 \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:     movsw\n"                        \
-                       "2:     movsb\n"                        \
-                       "3:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "4:     shl $2,%0\n"                    \
-                       "5:     addl $2,%0\n"                   \
-                       "6:     incl %0\n"                      \
-                       "       jmp 3b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,4b\n"                  \
-                       "       .long 1b,5b\n"                  \
-                       "       .long 2b,6b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       }                                                       \
-} while (0)
-
-/* Optimize just a little bit when we know the size of the move. */
-#define __constant_copy_user_zeroing(to, from, size)           \
-do {                                                           \
-       int __d0, __d1;                                         \
-       switch (size & 3) {                                     \
-       default:                                                \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "2:     pushl %0\n"                     \
-                       "       pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       rep; stosl\n"                   \
-                       "       popl %%eax\n"                   \
-                       "       popl %0\n"                      \
-                       "       shl $2,%0\n"                    \
-                       "       jmp 1b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,2b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       case 1:                                                 \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:     movsb\n"                        \
-                       "2:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "3:     pushl %0\n"                     \
-                       "       pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       rep; stosl\n"                   \
-                       "       stosb\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       popl %0\n"                      \
-                       "       shl $2,%0\n"                    \
-                       "       incl %0\n"                      \
-                       "       jmp 2b\n"                       \
-                       "4:     pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       stosb\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       incl %0\n"                      \
-                       "       jmp 2b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,3b\n"                  \
-                       "       .long 1b,4b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       case 2:                                                 \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:     movsw\n"                        \
-                       "2:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "3:     pushl %0\n"                     \
-                       "       pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       rep; stosl\n"                   \
-                       "       stosw\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       popl %0\n"                      \
-                       "       shl $2,%0\n"                    \
-                       "       addl $2,%0\n"                   \
-                       "       jmp 2b\n"                       \
-                       "4:     pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       stosw\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       addl $2,%0\n"                   \
-                       "       jmp 2b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,3b\n"                  \
-                       "       .long 1b,4b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       case 3:                                                 \
-               __asm__ __volatile__(                           \
-                       "0:     rep; movsl\n"                   \
-                       "1:     movsw\n"                        \
-                       "2:     movsb\n"                        \
-                       "3:\n"                                  \
-                       ".section .fixup,\"ax\"\n"              \
-                       "4:     pushl %0\n"                     \
-                       "       pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       rep; stosl\n"                   \
-                       "       stosw\n"                        \
-                       "       stosb\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       popl %0\n"                      \
-                       "       shl $2,%0\n"                    \
-                       "       addl $3,%0\n"                   \
-                       "       jmp 2b\n"                       \
-                       "5:     pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       stosw\n"                        \
-                       "       stosb\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       addl $3,%0\n"                   \
-                       "       jmp 2b\n"                       \
-                       "6:     pushl %%eax\n"                  \
-                       "       xorl %%eax,%%eax\n"             \
-                       "       stosb\n"                        \
-                       "       popl %%eax\n"                   \
-                       "       incl %0\n"                      \
-                       "       jmp 3b\n"                       \
-                       ".previous\n"                           \
-                       ".section __ex_table,\"a\"\n"           \
-                       "       .align 4\n"                     \
-                       "       .long 0b,4b\n"                  \
-                       "       .long 1b,5b\n"                  \
-                       "       .long 2b,6b\n"                  \
-                       ".previous"                             \
-                       : "=c"(size), "=&S" (__d0), "=&D" (__d1)\
-                       : "1"(from), "2"(to), "0"(size/4)       \
-                       : "memory");                            \
-               break;                                          \
-       }                                                       \
-} while (0)
-
-unsigned long __generic_copy_to_user(void *, const void *, unsigned long);
-unsigned long __generic_copy_from_user(void *, const void *, unsigned long);
-
-static inline unsigned long
-__constant_copy_to_user(void *to, const void *from, unsigned long n)
-{
-       prefetch(from);
-       if (access_ok(VERIFY_WRITE, to, n))
-               __constant_copy_user(to,from,n);
-       return n;
-}
-
-static inline unsigned long
-__constant_copy_from_user(void *to, const void *from, unsigned long n)
-{
-       if (access_ok(VERIFY_READ, from, n))
-               __constant_copy_user_zeroing(to,from,n);
-       else
-               memset(to, 0, n);
-       return n;
-}
-
-static inline unsigned long
-__constant_copy_to_user_nocheck(void *to, const void *from, unsigned long n)
-{
-       __constant_copy_user(to,from,n);
-       return n;
-}
-
-static inline unsigned long
-__constant_copy_from_user_nocheck(void *to, const void *from, unsigned long n)
-{
-       __constant_copy_user_zeroing(to,from,n);
-       return n;
-}
-
-#define copy_to_user(to,from,n)                                \
-       (__builtin_constant_p(n) ?                      \
-        __constant_copy_to_user((to),(from),(n)) :     \
-        __generic_copy_to_user((to),(from),(n)))
-
-#define copy_from_user(to,from,n)                      \
-       (__builtin_constant_p(n) ?                      \
-        __constant_copy_from_user((to),(from),(n)) :   \
-        __generic_copy_from_user((to),(from),(n)))
-
-#define __copy_to_user(to,from,n)                      \
-       (__builtin_constant_p(n) ?                      \
-        __constant_copy_to_user_nocheck((to),(from),(n)) :     \
-        __generic_copy_to_user_nocheck((to),(from),(n)))
-
-#define __copy_from_user(to,from,n)                    \
-       (__builtin_constant_p(n) ?                      \
-        __constant_copy_from_user_nocheck((to),(from),(n)) :   \
-        __generic_copy_from_user_nocheck((to),(from),(n)))
-
-long strncpy_from_user(char *dst, const char *src, long count);
-long __strncpy_from_user(char *dst, const char *src, long count);
-#define strlen_user(str) strnlen_user(str, ~0UL >> 1)
-long strnlen_user(const char *str, long n);
-unsigned long clear_user(void *mem, unsigned long len);
-unsigned long __clear_user(void *mem, unsigned long len);
-
-#endif /* __i386_UACCESS_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/ucontext.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/ucontext.h
deleted file mode 100644 (file)
index b0db369..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _ASMi386_UCONTEXT_H
-#define _ASMi386_UCONTEXT_H
-
-struct ucontext {
-       unsigned long     uc_flags;
-       struct ucontext  *uc_link;
-       stack_t           uc_stack;
-       struct sigcontext uc_mcontext;
-       sigset_t          uc_sigmask;   /* mask last for extensibility */
-};
-
-#endif /* !_ASMi386_UCONTEXT_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/unaligned.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/unaligned.h
deleted file mode 100644 (file)
index 7acd795..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef __I386_UNALIGNED_H
-#define __I386_UNALIGNED_H
-
-/*
- * The i386 can do unaligned accesses itself. 
- *
- * The strange macros are there to make sure these can't
- * be misused in a way that makes them not work on other
- * architectures where unaligned accesses aren't as simple.
- */
-
-/**
- * get_unaligned - get value from possibly mis-aligned location
- * @ptr: pointer to value
- *
- * This macro should be used for accessing values larger in size than 
- * single bytes at locations that are expected to be improperly aligned, 
- * e.g. retrieving a u16 value from a location not u16-aligned.
- *
- * Note that unaligned accesses can be very expensive on some architectures.
- */
-#define get_unaligned(ptr) (*(ptr))
-
-/**
- * put_unaligned - put value to a possibly mis-aligned location
- * @val: value to place
- * @ptr: pointer to location
- *
- * This macro should be used for placing values larger in size than 
- * single bytes at locations that are expected to be improperly aligned, 
- * e.g. writing a u16 value to a location not u16-aligned.
- *
- * Note that unaligned accesses can be very expensive on some architectures.
- */
-#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) ))
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/unistd.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/unistd.h
deleted file mode 100644 (file)
index 36de103..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-#ifndef _ASM_I386_UNISTD_H_
-#define _ASM_I386_UNISTD_H_
-
-/*
- * This file contains the system call numbers.
- */
-
-#define __NR_exit                1
-#define __NR_fork                2
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-#define __NR_waitpid             7
-#define __NR_creat               8
-#define __NR_link                9
-#define __NR_unlink             10
-#define __NR_execve             11
-#define __NR_chdir              12
-#define __NR_time               13
-#define __NR_mknod              14
-#define __NR_chmod              15
-#define __NR_lchown             16
-#define __NR_break              17
-#define __NR_oldstat            18
-#define __NR_lseek              19
-#define __NR_getpid             20
-#define __NR_mount              21
-#define __NR_umount             22
-#define __NR_setuid             23
-#define __NR_getuid             24
-#define __NR_stime              25
-#define __NR_ptrace             26
-#define __NR_alarm              27
-#define __NR_oldfstat           28
-#define __NR_pause              29
-#define __NR_utime              30
-#define __NR_stty               31
-#define __NR_gtty               32
-#define __NR_access             33
-#define __NR_nice               34
-#define __NR_ftime              35
-#define __NR_sync               36
-#define __NR_kill               37
-#define __NR_rename             38
-#define __NR_mkdir              39
-#define __NR_rmdir              40
-#define __NR_dup                41
-#define __NR_pipe               42
-#define __NR_times              43
-#define __NR_prof               44
-#define __NR_brk                45
-#define __NR_setgid             46
-#define __NR_getgid             47
-#define __NR_signal             48
-#define __NR_geteuid            49
-#define __NR_getegid            50
-#define __NR_acct               51
-#define __NR_umount2            52
-#define __NR_lock               53
-#define __NR_ioctl              54
-#define __NR_fcntl              55
-#define __NR_mpx                56
-#define __NR_setpgid            57
-#define __NR_ulimit             58
-#define __NR_oldolduname        59
-#define __NR_umask              60
-#define __NR_chroot             61
-#define __NR_ustat              62
-#define __NR_dup2               63
-#define __NR_getppid            64
-#define __NR_getpgrp            65
-#define __NR_setsid             66
-#define __NR_sigaction          67
-#define __NR_sgetmask           68
-#define __NR_ssetmask           69
-#define __NR_setreuid           70
-#define __NR_setregid           71
-#define __NR_sigsuspend                 72
-#define __NR_sigpending                 73
-#define __NR_sethostname        74
-#define __NR_setrlimit          75
-#define __NR_getrlimit          76     /* Back compatible 2Gig limited rlimit */
-#define __NR_getrusage          77
-#define __NR_gettimeofday       78
-#define __NR_settimeofday       79
-#define __NR_getgroups          80
-#define __NR_setgroups          81
-#define __NR_select             82
-#define __NR_symlink            83
-#define __NR_oldlstat           84
-#define __NR_readlink           85
-#define __NR_uselib             86
-#define __NR_swapon             87
-#define __NR_reboot             88
-#define __NR_readdir            89
-#define __NR_mmap               90
-#define __NR_munmap             91
-#define __NR_truncate           92
-#define __NR_ftruncate          93
-#define __NR_fchmod             94
-#define __NR_fchown             95
-#define __NR_getpriority        96
-#define __NR_setpriority        97
-#define __NR_profil             98
-#define __NR_statfs             99
-#define __NR_fstatfs           100
-#define __NR_ioperm            101
-#define __NR_socketcall                102
-#define __NR_syslog            103
-#define __NR_setitimer         104
-#define __NR_getitimer         105
-#define __NR_stat              106
-#define __NR_lstat             107
-#define __NR_fstat             108
-#define __NR_olduname          109
-#define __NR_iopl              110
-#define __NR_vhangup           111
-#define __NR_idle              112
-#define __NR_vm86old           113
-#define __NR_wait4             114
-#define __NR_swapoff           115
-#define __NR_sysinfo           116
-#define __NR_ipc               117
-#define __NR_fsync             118
-#define __NR_sigreturn         119
-#define __NR_clone             120
-#define __NR_setdomainname     121
-#define __NR_uname             122
-#define __NR_modify_ldt                123
-#define __NR_adjtimex          124
-#define __NR_mprotect          125
-#define __NR_sigprocmask       126
-#define __NR_create_module     127
-#define __NR_init_module       128
-#define __NR_delete_module     129
-#define __NR_get_kernel_syms   130
-#define __NR_quotactl          131
-#define __NR_getpgid           132
-#define __NR_fchdir            133
-#define __NR_bdflush           134
-#define __NR_sysfs             135
-#define __NR_personality       136
-#define __NR_afs_syscall       137 /* Syscall for Andrew File System */
-#define __NR_setfsuid          138
-#define __NR_setfsgid          139
-#define __NR__llseek           140
-#define __NR_getdents          141
-#define __NR__newselect                142
-#define __NR_flock             143
-#define __NR_msync             144
-#define __NR_readv             145
-#define __NR_writev            146
-#define __NR_getsid            147
-#define __NR_fdatasync         148
-#define __NR__sysctl           149
-#define __NR_mlock             150
-#define __NR_munlock           151
-#define __NR_mlockall          152
-#define __NR_munlockall                153
-#define __NR_sched_setparam            154
-#define __NR_sched_getparam            155
-#define __NR_sched_setscheduler                156
-#define __NR_sched_getscheduler                157
-#define __NR_sched_yield               158
-#define __NR_sched_get_priority_max    159
-#define __NR_sched_get_priority_min    160
-#define __NR_sched_rr_get_interval     161
-#define __NR_nanosleep         162
-#define __NR_mremap            163
-#define __NR_setresuid         164
-#define __NR_getresuid         165
-#define __NR_vm86              166
-#define __NR_query_module      167
-#define __NR_poll              168
-#define __NR_nfsservctl                169
-#define __NR_setresgid         170
-#define __NR_getresgid         171
-#define __NR_prctl              172
-#define __NR_rt_sigreturn      173
-#define __NR_rt_sigaction      174
-#define __NR_rt_sigprocmask    175
-#define __NR_rt_sigpending     176
-#define __NR_rt_sigtimedwait   177
-#define __NR_rt_sigqueueinfo   178
-#define __NR_rt_sigsuspend     179
-#define __NR_pread             180
-#define __NR_pwrite            181
-#define __NR_chown             182
-#define __NR_getcwd            183
-#define __NR_capget            184
-#define __NR_capset            185
-#define __NR_sigaltstack       186
-#define __NR_sendfile          187
-#define __NR_getpmsg           188     /* some people actually want streams */
-#define __NR_putpmsg           189     /* some people actually want streams */
-#define __NR_vfork             190
-#define __NR_ugetrlimit                191     /* SuS compliant getrlimit */
-#define __NR_mmap2             192
-#define __NR_truncate64                193
-#define __NR_ftruncate64       194
-#define __NR_stat64            195
-#define __NR_lstat64           196
-#define __NR_fstat64           197
-#define __NR_lchown32          198
-#define __NR_getuid32          199
-#define __NR_getgid32          200
-#define __NR_geteuid32         201
-#define __NR_getegid32         202
-#define __NR_setreuid32                203
-#define __NR_setregid32                204
-#define __NR_getgroups32       205
-#define __NR_setgroups32       206
-#define __NR_fchown32          207
-#define __NR_setresuid32       208
-#define __NR_getresuid32       209
-#define __NR_setresgid32       210
-#define __NR_getresgid32       211
-#define __NR_chown32           212
-#define __NR_setuid32          213
-#define __NR_setgid32          214
-#define __NR_setfsuid32                215
-#define __NR_setfsgid32                216
-#define __NR_pivot_root                217
-#define __NR_mincore           218
-#define __NR_madvise           219
-#define __NR_madvise1          219     /* delete when C lib stub is removed */
-#define __NR_getdents64                220
-#define __NR_fcntl64           221
-#define __NR_security          223     /* syscall for security modules */
-#define __NR_gettid            224
-#define __NR_readahead         225
-
-/* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
-
-#define __syscall_return(type, res) \
-do { \
-       if ((unsigned long)(res) >= (unsigned long)(-125)) { \
-               errno = -(res); \
-               res = -1; \
-       } \
-       return (type) (res); \
-} while (0)
-
-/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
-#define _syscall0(type,name) \
-type name(void) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name)); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall1(type,name,type1,arg1) \
-type name(type1 arg1) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-type name(type1 arg1,type2 arg2) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-type name(type1 arg1,type2 arg2,type3 arg3) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-                 "d" ((long)(arg3))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
-type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4))); \
-__syscall_return(type,__res); \
-} 
-
-#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
-         type5,arg5) \
-type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
-         type5,arg5,type6,arg6) \
-type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; int $0x80 ; pop %%ebp" \
-       : "=a" (__res) \
-       : "i" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)), \
-         "0" ((long)(arg6))); \
-__syscall_return(type,__res); \
-}
-
-#ifdef __KERNEL_SYSCALLS__
-
-/*
- * we need this inline - forking from kernel space will result
- * in NO COPY ON WRITE (!!!), until an execve is executed. This
- * is no problem, but for the stack. This is handled by not letting
- * main() use the stack at all after fork(). Thus, no function
- * calls - which means inline code for fork too, as otherwise we
- * would use the stack upon exit from 'fork()'.
- *
- * Actually only pause and fork are needed inline, so that there
- * won't be any messing with the stack from main(), but we define
- * some others too.
- */
-#define __NR__exit __NR_exit
-static inline _syscall0(int,pause)
-static inline _syscall0(int,sync)
-static inline _syscall0(pid_t,setsid)
-static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
-static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
-static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
-static inline _syscall1(int,dup,int,fd)
-static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
-static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
-static inline _syscall1(int,close,int,fd)
-static inline _syscall1(int,_exit,int,exitcode)
-static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
-static inline _syscall1(int,delete_module,const char *,name)
-
-static inline pid_t wait(int * wait_stat)
-{
-       return waitpid(-1,wait_stat,0);
-}
-
-#endif
-
-#endif /* _ASM_I386_UNISTD_H_ */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/user.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/user.h
deleted file mode 100644 (file)
index ddc06ea..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef _I386_USER_H
-#define _I386_USER_H
-
-#include <asm/page.h>
-#include <linux/ptrace.h>
-/* Core file format: The core file is written in such a way that gdb
-   can understand it and provide useful information to the user (under
-   linux we use the 'trad-core' bfd).  There are quite a number of
-   obstacles to being able to view the contents of the floating point
-   registers, and until these are solved you will not be able to view the
-   contents of them.  Actually, you can read in the core file and look at
-   the contents of the user struct to find out what the floating point
-   registers contain.
-   The actual file contents are as follows:
-   UPAGE: 1 page consisting of a user struct that tells gdb what is present
-   in the file.  Directly after this is a copy of the task_struct, which
-   is currently not used by gdb, but it may come in useful at some point.
-   All of the registers are stored as part of the upage.  The upage should
-   always be only one page.
-   DATA: The data area is stored.  We use current->end_text to
-   current->brk to pick up all of the user variables, plus any memory
-   that may have been malloced.  No attempt is made to determine if a page
-   is demand-zero or if a page is totally unused, we just cover the entire
-   range.  All of the addresses are rounded in such a way that an integral
-   number of pages is written.
-   STACK: We need the stack information in order to get a meaningful
-   backtrace.  We need to write the data from (esp) to
-   current->start_stack, so we round each of these off in order to be able
-   to write an integer number of pages.
-   The minimum core file size is 3 pages, or 12288 bytes.
-*/
-
-/*
- * Pentium III FXSR, SSE support
- *     Gareth Hughes <gareth@valinux.com>, May 2000
- *
- * Provide support for the GDB 5.0+ PTRACE_{GET|SET}FPXREGS requests for
- * interacting with the FXSR-format floating point environment.  Floating
- * point data can be accessed in the regular format in the usual manner,
- * and both the standard and SIMD floating point data can be accessed via
- * the new ptrace requests.  In either case, changes to the FPU environment
- * will be reflected in the task's state as expected.
- */
-
-struct user_i387_struct {
-       long    cwd;
-       long    swd;
-       long    twd;
-       long    fip;
-       long    fcs;
-       long    foo;
-       long    fos;
-       long    st_space[20];   /* 8*10 bytes for each FP-reg = 80 bytes */
-};
-
-struct user_fxsr_struct {
-       unsigned short  cwd;
-       unsigned short  swd;
-       unsigned short  twd;
-       unsigned short  fop;
-       long    fip;
-       long    fcs;
-       long    foo;
-       long    fos;
-       long    mxcsr;
-       long    reserved;
-       long    st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
-       long    xmm_space[32];  /* 8*16 bytes for each XMM-reg = 128 bytes */
-       long    padding[56];
-};
-
-/*
- * This is the old layout of "struct pt_regs", and
- * is still the layout used by user mode (the new
- * pt_regs doesn't have all registers as the kernel
- * doesn't use the extra segment registers)
- */
-struct user_regs_struct {
-       long ebx, ecx, edx, esi, edi, ebp, eax;
-       unsigned short ds, __ds, es, __es;
-       unsigned short fs, __fs, gs, __gs;
-       long orig_eax, eip;
-       unsigned short cs, __cs;
-       long eflags, esp;
-       unsigned short ss, __ss;
-};
-
-/* When the kernel dumps core, it starts by dumping the user struct -
-   this will be used by gdb to figure out where the data and stack segments
-   are within the file, and what virtual addresses to use. */
-struct user{
-/* We start with the registers, to mimic the way that "memory" is returned
-   from the ptrace(3,...) function.  */
-  struct user_regs_struct regs;                /* Where the registers are actually stored */
-/* ptrace does not yet supply these.  Someday.... */
-  int u_fpvalid;               /* True if math co-processor being used. */
-                                /* for this mess. Not yet used. */
-  struct user_i387_struct i387;        /* Math Co-processor registers. */
-/* The rest of this junk is to help gdb figure out what goes where */
-  unsigned long int u_tsize;   /* Text segment size (pages). */
-  unsigned long int u_dsize;   /* Data segment size (pages). */
-  unsigned long int u_ssize;   /* Stack segment size (pages). */
-  unsigned long start_code;     /* Starting virtual address of text. */
-  unsigned long start_stack;   /* Starting virtual address of stack area.
-                                  This is actually the bottom of the stack,
-                                  the top of the stack is always found in the
-                                  esp register.  */
-  long int signal;                     /* Signal that caused the core dump. */
-  int reserved;                        /* No longer used */
-  struct user_pt_regs * u_ar0; /* Used by gdb to help find the values for */
-                               /* the registers. */
-  struct user_i387_struct* u_fpstate;  /* Math Co-processor pointer. */
-  unsigned long magic;         /* To uniquely identify a core file */
-  char u_comm[32];             /* User command that was responsible */
-  int u_debugreg[8];
-};
-#define NBPG PAGE_SIZE
-#define UPAGES 1
-#define HOST_TEXT_START_ADDR (u.start_code)
-#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
-
-#endif /* _I386_USER_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/vga.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/vga.h
deleted file mode 100644 (file)
index ef0c0e5..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *     Access to VGA videoram
- *
- *     (c) 1998 Martin Mares <mj@ucw.cz>
- */
-
-#ifndef _LINUX_ASM_VGA_H_
-#define _LINUX_ASM_VGA_H_
-
-/*
- *     On the PC, we can just recalculate addresses and then
- *     access the videoram directly without any black magic.
- */
-
-#define VGA_MAP_MEM(x) (unsigned long)phys_to_virt(x)
-
-#define vga_readb(x) (*(x))
-#define vga_writeb(x,y) (*(y) = (x))
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/asm-xeno/xor.h b/old/xenolinux-2.4.16-sparse/include/asm-xeno/xor.h
deleted file mode 100644 (file)
index 5a99f54..0000000
+++ /dev/null
@@ -1,859 +0,0 @@
-/*
- * include/asm-i386/xor.h
- *
- * Optimized RAID-5 checksumming functions for MMX and SSE.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * You should have received a copy of the GNU General Public License
- * (for example /usr/src/linux/COPYING); if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- * High-speed RAID5 checksumming functions utilizing MMX instructions.
- * Copyright (C) 1998 Ingo Molnar.
- */
-
-#define FPU_SAVE                                                       \
-  do {                                                                 \
-       if (!(current->flags & PF_USEDFPU))                             \
-               __asm__ __volatile__ (" clts;\n");                      \
-       __asm__ __volatile__ ("fsave %0; fwait": "=m"(fpu_save[0]));    \
-  } while (0)
-
-#define FPU_RESTORE                                                    \
-  do {                                                                 \
-       __asm__ __volatile__ ("frstor %0": : "m"(fpu_save[0]));         \
-       if (!(current->flags & PF_USEDFPU))                             \
-               stts();                                                 \
-  } while (0)
-
-#define LD(x,y)                "       movq   8*("#x")(%1), %%mm"#y"   ;\n"
-#define ST(x,y)                "       movq %%mm"#y",   8*("#x")(%1)   ;\n"
-#define XO1(x,y)       "       pxor   8*("#x")(%2), %%mm"#y"   ;\n"
-#define XO2(x,y)       "       pxor   8*("#x")(%3), %%mm"#y"   ;\n"
-#define XO3(x,y)       "       pxor   8*("#x")(%4), %%mm"#y"   ;\n"
-#define XO4(x,y)       "       pxor   8*("#x")(%5), %%mm"#y"   ;\n"
-
-
-static void
-xor_pII_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
-{
-       unsigned long lines = bytes >> 7;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-       LD(i,0)                                 \
-               LD(i+1,1)                       \
-                       LD(i+2,2)               \
-                               LD(i+3,3)       \
-       XO1(i,0)                                \
-       ST(i,0)                                 \
-               XO1(i+1,1)                      \
-               ST(i+1,1)                       \
-                       XO1(i+2,2)              \
-                       ST(i+2,2)               \
-                               XO1(i+3,3)      \
-                               ST(i+3,3)
-
-       " .align 32                     ;\n"
-       " 1:                            ;\n"
-
-       BLOCK(0)
-       BLOCK(4)
-       BLOCK(8)
-       BLOCK(12)
-
-       "       addl $128, %1         ;\n"
-       "       addl $128, %2         ;\n"
-       "       decl %0               ;\n"
-       "       jnz 1b                ;\n"
-               :
-       : "r" (lines),
-         "r" (p1), "r" (p2)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-static void
-xor_pII_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-             unsigned long *p3)
-{
-       unsigned long lines = bytes >> 7;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-       LD(i,0)                                 \
-               LD(i+1,1)                       \
-                       LD(i+2,2)               \
-                               LD(i+3,3)       \
-       XO1(i,0)                                \
-               XO1(i+1,1)                      \
-                       XO1(i+2,2)              \
-                               XO1(i+3,3)      \
-       XO2(i,0)                                \
-       ST(i,0)                                 \
-               XO2(i+1,1)                      \
-               ST(i+1,1)                       \
-                       XO2(i+2,2)              \
-                       ST(i+2,2)               \
-                               XO2(i+3,3)      \
-                               ST(i+3,3)
-
-       " .align 32                     ;\n"
-       " 1:                            ;\n"
-
-       BLOCK(0)
-       BLOCK(4)
-       BLOCK(8)
-       BLOCK(12)
-
-       "       addl $128, %1         ;\n"
-       "       addl $128, %2         ;\n"
-       "       addl $128, %3         ;\n"
-       "       decl %0               ;\n"
-       "       jnz 1b                ;\n"
-               :
-       : "r" (lines),
-         "r" (p1), "r" (p2), "r" (p3)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-static void
-xor_pII_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-             unsigned long *p3, unsigned long *p4)
-{
-       unsigned long lines = bytes >> 7;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-       LD(i,0)                                 \
-               LD(i+1,1)                       \
-                       LD(i+2,2)               \
-                               LD(i+3,3)       \
-       XO1(i,0)                                \
-               XO1(i+1,1)                      \
-                       XO1(i+2,2)              \
-                               XO1(i+3,3)      \
-       XO2(i,0)                                \
-               XO2(i+1,1)                      \
-                       XO2(i+2,2)              \
-                               XO2(i+3,3)      \
-       XO3(i,0)                                \
-       ST(i,0)                                 \
-               XO3(i+1,1)                      \
-               ST(i+1,1)                       \
-                       XO3(i+2,2)              \
-                       ST(i+2,2)               \
-                               XO3(i+3,3)      \
-                               ST(i+3,3)
-
-       " .align 32                     ;\n"
-       " 1:                            ;\n"
-
-       BLOCK(0)
-       BLOCK(4)
-       BLOCK(8)
-       BLOCK(12)
-
-       "       addl $128, %1         ;\n"
-       "       addl $128, %2         ;\n"
-       "       addl $128, %3         ;\n"
-       "       addl $128, %4         ;\n"
-       "       decl %0               ;\n"
-       "       jnz 1b                ;\n"
-               :
-       : "r" (lines),
-         "r" (p1), "r" (p2), "r" (p3), "r" (p4)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-static void
-xor_pII_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-             unsigned long *p3, unsigned long *p4, unsigned long *p5)
-{
-       unsigned long lines = bytes >> 7;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-       LD(i,0)                                 \
-               LD(i+1,1)                       \
-                       LD(i+2,2)               \
-                               LD(i+3,3)       \
-       XO1(i,0)                                \
-               XO1(i+1,1)                      \
-                       XO1(i+2,2)              \
-                               XO1(i+3,3)      \
-       XO2(i,0)                                \
-               XO2(i+1,1)                      \
-                       XO2(i+2,2)              \
-                               XO2(i+3,3)      \
-       XO3(i,0)                                \
-               XO3(i+1,1)                      \
-                       XO3(i+2,2)              \
-                               XO3(i+3,3)      \
-       XO4(i,0)                                \
-       ST(i,0)                                 \
-               XO4(i+1,1)                      \
-               ST(i+1,1)                       \
-                       XO4(i+2,2)              \
-                       ST(i+2,2)               \
-                               XO4(i+3,3)      \
-                               ST(i+3,3)
-
-       " .align 32                     ;\n"
-       " 1:                            ;\n"
-
-       BLOCK(0)
-       BLOCK(4)
-       BLOCK(8)
-       BLOCK(12)
-
-       "       addl $128, %1         ;\n"
-       "       addl $128, %2         ;\n"
-       "       addl $128, %3         ;\n"
-       "       addl $128, %4         ;\n"
-       "       addl $128, %5         ;\n"
-       "       decl %0               ;\n"
-       "       jnz 1b                ;\n"
-               :
-       : "g" (lines),
-         "r" (p1), "r" (p2), "r" (p3), "r" (p4), "r" (p5)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-#undef LD
-#undef XO1
-#undef XO2
-#undef XO3
-#undef XO4
-#undef ST
-#undef BLOCK
-
-static void
-xor_p5_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
-{
-       unsigned long lines = bytes >> 6;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-       " .align 32                  ;\n"
-       " 1:                         ;\n"
-       "       movq   (%1), %%mm0   ;\n"
-       "       movq  8(%1), %%mm1   ;\n"
-       "       pxor   (%2), %%mm0   ;\n"
-       "       movq 16(%1), %%mm2   ;\n"
-       "       movq %%mm0,   (%1)   ;\n"
-       "       pxor  8(%2), %%mm1   ;\n"
-       "       movq 24(%1), %%mm3   ;\n"
-       "       movq %%mm1,  8(%1)   ;\n"
-       "       pxor 16(%2), %%mm2   ;\n"
-       "       movq 32(%1), %%mm4   ;\n"
-       "       movq %%mm2, 16(%1)   ;\n"
-       "       pxor 24(%2), %%mm3   ;\n"
-       "       movq 40(%1), %%mm5   ;\n"
-       "       movq %%mm3, 24(%1)   ;\n"
-       "       pxor 32(%2), %%mm4   ;\n"
-       "       movq 48(%1), %%mm6   ;\n"
-       "       movq %%mm4, 32(%1)   ;\n"
-       "       pxor 40(%2), %%mm5   ;\n"
-       "       movq 56(%1), %%mm7   ;\n"
-       "       movq %%mm5, 40(%1)   ;\n"
-       "       pxor 48(%2), %%mm6   ;\n"
-       "       pxor 56(%2), %%mm7   ;\n"
-       "       movq %%mm6, 48(%1)   ;\n"
-       "       movq %%mm7, 56(%1)   ;\n"
-       
-       "       addl $64, %1         ;\n"
-       "       addl $64, %2         ;\n"
-       "       decl %0              ;\n"
-       "       jnz 1b               ;\n"
-       : 
-       : "r" (lines),
-         "r" (p1), "r" (p2)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-static void
-xor_p5_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-            unsigned long *p3)
-{
-       unsigned long lines = bytes >> 6;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-       " .align 32,0x90             ;\n"
-       " 1:                         ;\n"
-       "       movq   (%1), %%mm0   ;\n"
-       "       movq  8(%1), %%mm1   ;\n"
-       "       pxor   (%2), %%mm0   ;\n"
-       "       movq 16(%1), %%mm2   ;\n"
-       "       pxor  8(%2), %%mm1   ;\n"
-       "       pxor   (%3), %%mm0   ;\n"
-       "       pxor 16(%2), %%mm2   ;\n"
-       "       movq %%mm0,   (%1)   ;\n"
-       "       pxor  8(%3), %%mm1   ;\n"
-       "       pxor 16(%3), %%mm2   ;\n"
-       "       movq 24(%1), %%mm3   ;\n"
-       "       movq %%mm1,  8(%1)   ;\n"
-       "       movq 32(%1), %%mm4   ;\n"
-       "       movq 40(%1), %%mm5   ;\n"
-       "       pxor 24(%2), %%mm3   ;\n"
-       "       movq %%mm2, 16(%1)   ;\n"
-       "       pxor 32(%2), %%mm4   ;\n"
-       "       pxor 24(%3), %%mm3   ;\n"
-       "       pxor 40(%2), %%mm5   ;\n"
-       "       movq %%mm3, 24(%1)   ;\n"
-       "       pxor 32(%3), %%mm4   ;\n"
-       "       pxor 40(%3), %%mm5   ;\n"
-       "       movq 48(%1), %%mm6   ;\n"
-       "       movq %%mm4, 32(%1)   ;\n"
-       "       movq 56(%1), %%mm7   ;\n"
-       "       pxor 48(%2), %%mm6   ;\n"
-       "       movq %%mm5, 40(%1)   ;\n"
-       "       pxor 56(%2), %%mm7   ;\n"
-       "       pxor 48(%3), %%mm6   ;\n"
-       "       pxor 56(%3), %%mm7   ;\n"
-       "       movq %%mm6, 48(%1)   ;\n"
-       "       movq %%mm7, 56(%1)   ;\n"
-      
-       "       addl $64, %1         ;\n"
-       "       addl $64, %2         ;\n"
-       "       addl $64, %3         ;\n"
-       "       decl %0              ;\n"
-       "       jnz 1b               ;\n"
-       : 
-       : "r" (lines),
-         "r" (p1), "r" (p2), "r" (p3)
-       : "memory" );
-
-       FPU_RESTORE;
-}
-
-static void
-xor_p5_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-            unsigned long *p3, unsigned long *p4)
-{
-       unsigned long lines = bytes >> 6;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-       " .align 32,0x90             ;\n"
-       " 1:                         ;\n"
-       "       movq   (%1), %%mm0   ;\n"
-       "       movq  8(%1), %%mm1   ;\n"
-       "       pxor   (%2), %%mm0   ;\n"
-       "       movq 16(%1), %%mm2   ;\n"
-       "       pxor  8(%2), %%mm1   ;\n"
-       "       pxor   (%3), %%mm0   ;\n"
-       "       pxor 16(%2), %%mm2   ;\n"
-       "       pxor  8(%3), %%mm1   ;\n"
-       "       pxor   (%4), %%mm0   ;\n"
-       "       movq 24(%1), %%mm3   ;\n"
-       "       pxor 16(%3), %%mm2   ;\n"
-       "       pxor  8(%4), %%mm1   ;\n"
-       "       movq %%mm0,   (%1)   ;\n"
-       "       movq 32(%1), %%mm4   ;\n"
-       "       pxor 24(%2), %%mm3   ;\n"
-       "       pxor 16(%4), %%mm2   ;\n"
-       "       movq %%mm1,  8(%1)   ;\n"
-       "       movq 40(%1), %%mm5   ;\n"
-       "       pxor 32(%2), %%mm4   ;\n"
-       "       pxor 24(%3), %%mm3   ;\n"
-       "       movq %%mm2, 16(%1)   ;\n"
-       "       pxor 40(%2), %%mm5   ;\n"
-       "       pxor 32(%3), %%mm4   ;\n"
-       "       pxor 24(%4), %%mm3   ;\n"
-       "       movq %%mm3, 24(%1)   ;\n"
-       "       movq 56(%1), %%mm7   ;\n"
-       "       movq 48(%1), %%mm6   ;\n"
-       "       pxor 40(%3), %%mm5   ;\n"
-       "       pxor 32(%4), %%mm4   ;\n"
-       "       pxor 48(%2), %%mm6   ;\n"
-       "       movq %%mm4, 32(%1)   ;\n"
-       "       pxor 56(%2), %%mm7   ;\n"
-       "       pxor 40(%4), %%mm5   ;\n"
-       "       pxor 48(%3), %%mm6   ;\n"
-       "       pxor 56(%3), %%mm7   ;\n"
-       "       movq %%mm5, 40(%1)   ;\n"
-       "       pxor 48(%4), %%mm6   ;\n"
-       "       pxor 56(%4), %%mm7   ;\n"
-       "       movq %%mm6, 48(%1)   ;\n"
-       "       movq %%mm7, 56(%1)   ;\n"
-      
-       "       addl $64, %1         ;\n"
-       "       addl $64, %2         ;\n"
-       "       addl $64, %3         ;\n"
-       "       addl $64, %4         ;\n"
-       "       decl %0              ;\n"
-       "       jnz 1b               ;\n"
-       : 
-       : "r" (lines),
-         "r" (p1), "r" (p2), "r" (p3), "r" (p4)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-static void
-xor_p5_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-            unsigned long *p3, unsigned long *p4, unsigned long *p5)
-{
-       unsigned long lines = bytes >> 6;
-       char fpu_save[108];
-
-       FPU_SAVE;
-
-       __asm__ __volatile__ (
-       " .align 32,0x90             ;\n"
-       " 1:                         ;\n"
-       "       movq   (%1), %%mm0   ;\n"
-       "       movq  8(%1), %%mm1   ;\n"
-       "       pxor   (%2), %%mm0   ;\n"
-       "       pxor  8(%2), %%mm1   ;\n"
-       "       movq 16(%1), %%mm2   ;\n"
-       "       pxor   (%3), %%mm0   ;\n"
-       "       pxor  8(%3), %%mm1   ;\n"
-       "       pxor 16(%2), %%mm2   ;\n"
-       "       pxor   (%4), %%mm0   ;\n"
-       "       pxor  8(%4), %%mm1   ;\n"
-       "       pxor 16(%3), %%mm2   ;\n"
-       "       movq 24(%1), %%mm3   ;\n"
-       "       pxor   (%5), %%mm0   ;\n"
-       "       pxor  8(%5), %%mm1   ;\n"
-       "       movq %%mm0,   (%1)   ;\n"
-       "       pxor 16(%4), %%mm2   ;\n"
-       "       pxor 24(%2), %%mm3   ;\n"
-       "       movq %%mm1,  8(%1)   ;\n"
-       "       pxor 16(%5), %%mm2   ;\n"
-       "       pxor 24(%3), %%mm3   ;\n"
-       "       movq 32(%1), %%mm4   ;\n"
-       "       movq %%mm2, 16(%1)   ;\n"
-       "       pxor 24(%4), %%mm3   ;\n"
-       "       pxor 32(%2), %%mm4   ;\n"
-       "       movq 40(%1), %%mm5   ;\n"
-       "       pxor 24(%5), %%mm3   ;\n"
-       "       pxor 32(%3), %%mm4   ;\n"
-       "       pxor 40(%2), %%mm5   ;\n"
-       "       movq %%mm3, 24(%1)   ;\n"
-       "       pxor 32(%4), %%mm4   ;\n"
-       "       pxor 40(%3), %%mm5   ;\n"
-       "       movq 48(%1), %%mm6   ;\n"
-       "       movq 56(%1), %%mm7   ;\n"
-       "       pxor 32(%5), %%mm4   ;\n"
-       "       pxor 40(%4), %%mm5   ;\n"
-       "       pxor 48(%2), %%mm6   ;\n"
-       "       pxor 56(%2), %%mm7   ;\n"
-       "       movq %%mm4, 32(%1)   ;\n"
-       "       pxor 48(%3), %%mm6   ;\n"
-       "       pxor 56(%3), %%mm7   ;\n"
-       "       pxor 40(%5), %%mm5   ;\n"
-       "       pxor 48(%4), %%mm6   ;\n"
-       "       pxor 56(%4), %%mm7   ;\n"
-       "       movq %%mm5, 40(%1)   ;\n"
-       "       pxor 48(%5), %%mm6   ;\n"
-       "       pxor 56(%5), %%mm7   ;\n"
-       "       movq %%mm6, 48(%1)   ;\n"
-       "       movq %%mm7, 56(%1)   ;\n"
-      
-       "       addl $64, %1         ;\n"
-       "       addl $64, %2         ;\n"
-       "       addl $64, %3         ;\n"
-       "       addl $64, %4         ;\n"
-       "       addl $64, %5         ;\n"
-       "       decl %0              ;\n"
-       "       jnz 1b               ;\n"
-       : 
-       : "g" (lines),
-         "r" (p1), "r" (p2), "r" (p3), "r" (p4), "r" (p5)
-       : "memory");
-
-       FPU_RESTORE;
-}
-
-static struct xor_block_template xor_block_pII_mmx = {
-       name: "pII_mmx",
-       do_2: xor_pII_mmx_2,
-       do_3: xor_pII_mmx_3,
-       do_4: xor_pII_mmx_4,
-       do_5: xor_pII_mmx_5,
-};
-
-static struct xor_block_template xor_block_p5_mmx = {
-       name: "p5_mmx",
-       do_2: xor_p5_mmx_2,
-       do_3: xor_p5_mmx_3,
-       do_4: xor_p5_mmx_4,
-       do_5: xor_p5_mmx_5,
-};
-
-#undef FPU_SAVE
-#undef FPU_RESTORE
-
-/*
- * Cache avoiding checksumming functions utilizing KNI instructions
- * Copyright (C) 1999 Zach Brown (with obvious credit due Ingo)
- */
-
-#define XMMS_SAVE                              \
-       __asm__ __volatile__ (                  \
-               "movl %%cr0,%0          ;\n\t"  \
-               "clts                   ;\n\t"  \
-               "movups %%xmm0,(%1)     ;\n\t"  \
-               "movups %%xmm1,0x10(%1) ;\n\t"  \
-               "movups %%xmm2,0x20(%1) ;\n\t"  \
-               "movups %%xmm3,0x30(%1) ;\n\t"  \
-               : "=r" (cr0)                    \
-               : "r" (xmm_save)                \
-               : "memory")
-
-#define XMMS_RESTORE                           \
-       __asm__ __volatile__ (                  \
-               "sfence                 ;\n\t"  \
-               "movups (%1),%%xmm0     ;\n\t"  \
-               "movups 0x10(%1),%%xmm1 ;\n\t"  \
-               "movups 0x20(%1),%%xmm2 ;\n\t"  \
-               "movups 0x30(%1),%%xmm3 ;\n\t"  \
-               "movl   %0,%%cr0        ;\n\t"  \
-               :                               \
-               : "r" (cr0), "r" (xmm_save)     \
-               : "memory")
-
-#define OFFS(x)                "16*("#x")"
-#define PF_OFFS(x)     "256+16*("#x")"
-#define        PF0(x)          "       prefetchnta "PF_OFFS(x)"(%1)            ;\n"
-#define LD(x,y)                "       movaps   "OFFS(x)"(%1), %%xmm"#y"       ;\n"
-#define ST(x,y)                "       movaps %%xmm"#y",   "OFFS(x)"(%1)       ;\n"
-#define PF1(x)         "       prefetchnta "PF_OFFS(x)"(%2)            ;\n"
-#define PF2(x)         "       prefetchnta "PF_OFFS(x)"(%3)            ;\n"
-#define PF3(x)         "       prefetchnta "PF_OFFS(x)"(%4)            ;\n"
-#define PF4(x)         "       prefetchnta "PF_OFFS(x)"(%5)            ;\n"
-#define PF5(x)         "       prefetchnta "PF_OFFS(x)"(%6)            ;\n"
-#define XO1(x,y)       "       xorps   "OFFS(x)"(%2), %%xmm"#y"        ;\n"
-#define XO2(x,y)       "       xorps   "OFFS(x)"(%3), %%xmm"#y"        ;\n"
-#define XO3(x,y)       "       xorps   "OFFS(x)"(%4), %%xmm"#y"        ;\n"
-#define XO4(x,y)       "       xorps   "OFFS(x)"(%5), %%xmm"#y"        ;\n"
-#define XO5(x,y)       "       xorps   "OFFS(x)"(%6), %%xmm"#y"        ;\n"
-
-
-static void
-xor_sse_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
-{
-        unsigned long lines = bytes >> 8;
-       char xmm_save[16*4];
-       int cr0;
-
-       XMMS_SAVE;
-
-        __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-               LD(i,0)                                 \
-                       LD(i+1,1)                       \
-               PF1(i)                                  \
-                               PF1(i+2)                \
-                               LD(i+2,2)               \
-                                       LD(i+3,3)       \
-               PF0(i+4)                                \
-                               PF0(i+6)                \
-               XO1(i,0)                                \
-                       XO1(i+1,1)                      \
-                               XO1(i+2,2)              \
-                                       XO1(i+3,3)      \
-               ST(i,0)                                 \
-                       ST(i+1,1)                       \
-                               ST(i+2,2)               \
-                                       ST(i+3,3)       \
-
-
-               PF0(0)
-                               PF0(2)
-
-       " .align 32                     ;\n"
-        " 1:                            ;\n"
-
-               BLOCK(0)
-               BLOCK(4)
-               BLOCK(8)
-               BLOCK(12)
-
-        "       addl $256, %1           ;\n"
-        "       addl $256, %2           ;\n"
-        "       decl %0                 ;\n"
-        "       jnz 1b                  ;\n"
-       :
-       : "r" (lines),
-         "r" (p1), "r" (p2)
-        : "memory");
-
-       XMMS_RESTORE;
-}
-
-static void
-xor_sse_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-         unsigned long *p3)
-{
-        unsigned long lines = bytes >> 8;
-       char xmm_save[16*4];
-       int cr0;
-
-       XMMS_SAVE;
-
-        __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-               PF1(i)                                  \
-                               PF1(i+2)                \
-               LD(i,0)                                 \
-                       LD(i+1,1)                       \
-                               LD(i+2,2)               \
-                                       LD(i+3,3)       \
-               PF2(i)                                  \
-                               PF2(i+2)                \
-               PF0(i+4)                                \
-                               PF0(i+6)                \
-               XO1(i,0)                                \
-                       XO1(i+1,1)                      \
-                               XO1(i+2,2)              \
-                                       XO1(i+3,3)      \
-               XO2(i,0)                                \
-                       XO2(i+1,1)                      \
-                               XO2(i+2,2)              \
-                                       XO2(i+3,3)      \
-               ST(i,0)                                 \
-                       ST(i+1,1)                       \
-                               ST(i+2,2)               \
-                                       ST(i+3,3)       \
-
-
-               PF0(0)
-                               PF0(2)
-
-       " .align 32                     ;\n"
-        " 1:                            ;\n"
-
-               BLOCK(0)
-               BLOCK(4)
-               BLOCK(8)
-               BLOCK(12)
-
-        "       addl $256, %1           ;\n"
-        "       addl $256, %2           ;\n"
-        "       addl $256, %3           ;\n"
-        "       decl %0                 ;\n"
-        "       jnz 1b                  ;\n"
-       :
-       : "r" (lines),
-         "r" (p1), "r"(p2), "r"(p3)
-        : "memory" );
-
-       XMMS_RESTORE;
-}
-
-static void
-xor_sse_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-         unsigned long *p3, unsigned long *p4)
-{
-        unsigned long lines = bytes >> 8;
-       char xmm_save[16*4];
-       int cr0;
-
-       XMMS_SAVE;
-
-        __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-               PF1(i)                                  \
-                               PF1(i+2)                \
-               LD(i,0)                                 \
-                       LD(i+1,1)                       \
-                               LD(i+2,2)               \
-                                       LD(i+3,3)       \
-               PF2(i)                                  \
-                               PF2(i+2)                \
-               XO1(i,0)                                \
-                       XO1(i+1,1)                      \
-                               XO1(i+2,2)              \
-                                       XO1(i+3,3)      \
-               PF3(i)                                  \
-                               PF3(i+2)                \
-               PF0(i+4)                                \
-                               PF0(i+6)                \
-               XO2(i,0)                                \
-                       XO2(i+1,1)                      \
-                               XO2(i+2,2)              \
-                                       XO2(i+3,3)      \
-               XO3(i,0)                                \
-                       XO3(i+1,1)                      \
-                               XO3(i+2,2)              \
-                                       XO3(i+3,3)      \
-               ST(i,0)                                 \
-                       ST(i+1,1)                       \
-                               ST(i+2,2)               \
-                                       ST(i+3,3)       \
-
-
-               PF0(0)
-                               PF0(2)
-
-       " .align 32                     ;\n"
-        " 1:                            ;\n"
-
-               BLOCK(0)
-               BLOCK(4)
-               BLOCK(8)
-               BLOCK(12)
-
-        "       addl $256, %1           ;\n"
-        "       addl $256, %2           ;\n"
-        "       addl $256, %3           ;\n"
-        "       addl $256, %4           ;\n"
-        "       decl %0                 ;\n"
-        "       jnz 1b                  ;\n"
-       :
-       : "r" (lines),
-         "r" (p1), "r" (p2), "r" (p3), "r" (p4)
-        : "memory" );
-
-       XMMS_RESTORE;
-}
-
-static void
-xor_sse_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
-         unsigned long *p3, unsigned long *p4, unsigned long *p5)
-{
-        unsigned long lines = bytes >> 8;
-       char xmm_save[16*4];
-       int cr0;
-
-       XMMS_SAVE;
-
-        __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
-               PF1(i)                                  \
-                               PF1(i+2)                \
-               LD(i,0)                                 \
-                       LD(i+1,1)                       \
-                               LD(i+2,2)               \
-                                       LD(i+3,3)       \
-               PF2(i)                                  \
-                               PF2(i+2)                \
-               XO1(i,0)                                \
-                       XO1(i+1,1)                      \
-                               XO1(i+2,2)              \
-                                       XO1(i+3,3)      \
-               PF3(i)                                  \
-                               PF3(i+2)                \
-               XO2(i,0)                                \
-                       XO2(i+1,1)                      \
-                               XO2(i+2,2)              \
-                                       XO2(i+3,3)      \
-               PF4(i)                                  \
-                               PF4(i+2)                \
-               PF0(i+4)                                \
-                               PF0(i+6)                \
-               XO3(i,0)                                \
-                       XO3(i+1,1)                      \
-                               XO3(i+2,2)              \
-                                       XO3(i+3,3)      \
-               XO4(i,0)                                \
-                       XO4(i+1,1)                      \
-                               XO4(i+2,2)              \
-                                       XO4(i+3,3)      \
-               ST(i,0)                                 \
-                       ST(i+1,1)                       \
-                               ST(i+2,2)               \
-                                       ST(i+3,3)       \
-
-
-               PF0(0)
-                               PF0(2)
-
-       " .align 32                     ;\n"
-        " 1:                            ;\n"
-
-               BLOCK(0)
-               BLOCK(4)
-               BLOCK(8)
-               BLOCK(12)
-
-        "       addl $256, %1           ;\n"
-        "       addl $256, %2           ;\n"
-        "       addl $256, %3           ;\n"
-        "       addl $256, %4           ;\n"
-        "       addl $256, %5           ;\n"
-        "       decl %0                 ;\n"
-        "       jnz 1b                  ;\n"
-       :
-       : "r" (lines),
-         "r" (p1), "r" (p2), "r" (p3), "r" (p4), "r" (p5)
-       : "memory");
-
-       XMMS_RESTORE;
-}
-
-static struct xor_block_template xor_block_pIII_sse = {
-        name: "pIII_sse",
-        do_2: xor_sse_2,
-        do_3: xor_sse_3,
-        do_4: xor_sse_4,
-        do_5: xor_sse_5,
-};
-
-/* Also try the generic routines.  */
-#include <asm-generic/xor.h>
-
-#undef XOR_TRY_TEMPLATES
-#define XOR_TRY_TEMPLATES                              \
-       do {                                            \
-               xor_speed(&xor_block_8regs);            \
-               xor_speed(&xor_block_32regs);           \
-               if (cpu_has_xmm)                        \
-                       xor_speed(&xor_block_pIII_sse); \
-               if (md_cpu_has_mmx()) {                 \
-                       xor_speed(&xor_block_pII_mmx);  \
-                       xor_speed(&xor_block_p5_mmx);   \
-               }                                       \
-       } while (0)
-
-/* We force the use of the SSE xor block because it can write around L2.
-   We may also be able to load into the L1 only depending on how the cpu
-   deals with a load to a line that is being prefetched.  */
-#define XOR_SELECT_TEMPLATE(FASTEST) \
-       (cpu_has_xmm ? &xor_block_pIII_sse : FASTEST)
diff --git a/old/xenolinux-2.4.16-sparse/include/linux/blk.h b/old/xenolinux-2.4.16-sparse/include/linux/blk.h
deleted file mode 100644 (file)
index c96120e..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-#ifndef _BLK_H
-#define _BLK_H
-
-#include <linux/blkdev.h>
-#include <linux/locks.h>
-#include <linux/config.h>
-#include <linux/spinlock.h>
-
-/*
- * Spinlock for protecting the request queue which
- * is mucked around with in interrupts on potentially
- * multiple CPU's..
- */
-extern spinlock_t io_request_lock;
-
-/*
- * Initialization functions.
- */
-extern int isp16_init(void);
-extern int cdu31a_init(void);
-extern int acsi_init(void);
-extern int mcd_init(void);
-extern int mcdx_init(void);
-extern int sbpcd_init(void);
-extern int aztcd_init(void);
-extern int sony535_init(void);
-extern int gscd_init(void);
-extern int cm206_init(void);
-extern int optcd_init(void);
-extern int sjcd_init(void);
-extern int cdi_init(void);
-extern int hd_init(void);
-extern int ide_init(void);
-extern int xd_init(void);
-extern int mfm_init(void);
-extern int loop_init(void);
-extern int md_init(void);
-extern int ap_init(void);
-extern int ddv_init(void);
-extern int z2_init(void);
-extern int swim3_init(void);
-extern int swimiop_init(void);
-extern int amiga_floppy_init(void);
-extern int atari_floppy_init(void);
-extern int ez_init(void);
-extern int bpcd_init(void);
-extern int ps2esdi_init(void);
-extern int jsfd_init(void);
-extern int viodasd_init(void);
-extern int viocd_init(void);
-extern int xlblk_init(void);
-
-#if defined(CONFIG_ARCH_S390)
-extern int dasd_init(void);
-extern int xpram_init(void);
-extern int tapeblock_init(void);
-#endif /* CONFIG_ARCH_S390 */
-
-extern void set_device_ro(kdev_t dev,int flag);
-void add_blkdev_randomness(int major);
-
-extern int floppy_init(void);
-extern void rd_load(void);
-extern int rd_init(void);
-extern int rd_doload;          /* 1 = load ramdisk, 0 = don't load */
-extern int rd_prompt;          /* 1 = prompt for ramdisk, 0 = don't prompt */
-extern int rd_image_start;     /* starting block # of image */
-
-#ifdef CONFIG_BLK_DEV_INITRD
-
-#define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */
-
-extern unsigned long initrd_start,initrd_end;
-extern int mount_initrd; /* zero if initrd should not be mounted */
-extern int initrd_below_start_ok; /* 1 if it is not an error if initrd_start < memory_start */
-void initrd_init(void);
-
-#endif
-
-                
-/*
- * end_request() and friends. Must be called with the request queue spinlock
- * acquired. All functions called within end_request() _must_be_ atomic.
- *
- * Several drivers define their own end_request and call
- * end_that_request_first() and end_that_request_last()
- * for parts of the original function. This prevents
- * code duplication in drivers.
- */
-
-static inline void blkdev_dequeue_request(struct request * req)
-{
-       list_del(&req->queue);
-}
-
-int end_that_request_first(struct request *req, int uptodate, char *name);
-void end_that_request_last(struct request *req);
-
-#if defined(MAJOR_NR) || defined(IDE_DRIVER)
-
-#undef DEVICE_ON
-#undef DEVICE_OFF
-
-/*
- * Add entries as needed.
- */
-
-#ifdef IDE_DRIVER
-
-#define DEVICE_NR(device)      (MINOR(device) >> PARTN_BITS)
-#define DEVICE_NAME "ide"
-
-#elif (MAJOR_NR == RAMDISK_MAJOR)
-
-/* ram disk */
-#define DEVICE_NAME "ramdisk"
-#define DEVICE_NR(device) (MINOR(device))
-#define DEVICE_NO_RANDOM
-
-#elif (MAJOR_NR == Z2RAM_MAJOR)
-
-/* Zorro II Ram */
-#define DEVICE_NAME "Z2RAM"
-#define DEVICE_REQUEST do_z2_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == FLOPPY_MAJOR)
-
-static void floppy_off(unsigned int nr);
-
-#define DEVICE_NAME "floppy"
-#define DEVICE_INTR do_floppy
-#define DEVICE_REQUEST do_fd_request
-#define DEVICE_NR(device) ( (MINOR(device) & 3) | ((MINOR(device) & 0x80 ) >> 5 ))
-#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device))
-
-#elif (MAJOR_NR == HD_MAJOR)
-
-/* Hard disk:  timeout is 6 seconds. */
-#define DEVICE_NAME "hard disk"
-#define DEVICE_INTR do_hd
-#define TIMEOUT_VALUE (6*HZ)
-#define DEVICE_REQUEST do_hd_request
-#define DEVICE_NR(device) (MINOR(device)>>6)
-
-#elif (SCSI_DISK_MAJOR(MAJOR_NR))
-
-#define DEVICE_NAME "scsidisk"
-#define TIMEOUT_VALUE (2*HZ)
-#define DEVICE_NR(device) (((MAJOR(device) & SD_MAJOR_MASK) << (8 - 4)) + (MINOR(device) >> 4))
-
-/* Kludge to use the same number for both char and block major numbers */
-#elif  (MAJOR_NR == MD_MAJOR) && defined(MD_DRIVER)
-
-#define DEVICE_NAME "Multiple devices driver"
-#define DEVICE_REQUEST do_md_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == SCSI_TAPE_MAJOR)
-
-#define DEVICE_NAME "scsitape"
-#define DEVICE_INTR do_st  
-#define DEVICE_NR(device) (MINOR(device) & 0x7f)
-
-#elif (MAJOR_NR == OSST_MAJOR)
-
-#define DEVICE_NAME "onstream" 
-#define DEVICE_INTR do_osst
-#define DEVICE_NR(device) (MINOR(device) & 0x7f) 
-#define DEVICE_ON(device) 
-#define DEVICE_OFF(device) 
-
-#elif (MAJOR_NR == SCSI_CDROM_MAJOR)
-
-#define DEVICE_NAME "CD-ROM"
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == XT_DISK_MAJOR)
-
-#define DEVICE_NAME "xt disk"
-#define DEVICE_REQUEST do_xd_request
-#define DEVICE_NR(device) (MINOR(device) >> 6)
-
-#elif (MAJOR_NR == PS2ESDI_MAJOR)
-
-#define DEVICE_NAME "PS/2 ESDI"
-#define DEVICE_REQUEST do_ps2esdi_request
-#define DEVICE_NR(device) (MINOR(device) >> 6)
-
-#elif (MAJOR_NR == CDU31A_CDROM_MAJOR)
-
-#define DEVICE_NAME "CDU31A"
-#define DEVICE_REQUEST do_cdu31a_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == ACSI_MAJOR) && (defined(CONFIG_ATARI_ACSI) || defined(CONFIG_ATARI_ACSI_MODULE))
-
-#define DEVICE_NAME "ACSI"
-#define DEVICE_INTR do_acsi
-#define DEVICE_REQUEST do_acsi_request
-#define DEVICE_NR(device) (MINOR(device) >> 4)
-
-#elif (MAJOR_NR == MITSUMI_CDROM_MAJOR)
-
-#define DEVICE_NAME "Mitsumi CD-ROM"
-/* #define DEVICE_INTR do_mcd */
-#define DEVICE_REQUEST do_mcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MITSUMI_X_CDROM_MAJOR)
-
-#define DEVICE_NAME "Mitsumi CD-ROM"
-/* #define DEVICE_INTR do_mcdx */
-#define DEVICE_REQUEST do_mcdx_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #1"
-#define DEVICE_REQUEST do_sbpcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM2_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #2"
-#define DEVICE_REQUEST do_sbpcd2_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM3_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #3"
-#define DEVICE_REQUEST do_sbpcd3_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM4_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #4"
-#define DEVICE_REQUEST do_sbpcd4_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == AZTECH_CDROM_MAJOR)
-
-#define DEVICE_NAME "Aztech CD-ROM"
-#define DEVICE_REQUEST do_aztcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == CDU535_CDROM_MAJOR)
-
-#define DEVICE_NAME "SONY-CDU535"
-#define DEVICE_INTR do_cdu535
-#define DEVICE_REQUEST do_cdu535_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == GOLDSTAR_CDROM_MAJOR)
-
-#define DEVICE_NAME "Goldstar R420"
-#define DEVICE_REQUEST do_gscd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == CM206_CDROM_MAJOR)
-#define DEVICE_NAME "Philips/LMS CD-ROM cm206"
-#define DEVICE_REQUEST do_cm206_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == OPTICS_CDROM_MAJOR)
-
-#define DEVICE_NAME "DOLPHIN 8000AT CD-ROM"
-#define DEVICE_REQUEST do_optcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == SANYO_CDROM_MAJOR)
-
-#define DEVICE_NAME "Sanyo H94A CD-ROM"
-#define DEVICE_REQUEST do_sjcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == APBLOCK_MAJOR)
-
-#define DEVICE_NAME "apblock"
-#define DEVICE_REQUEST ap_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == DDV_MAJOR)
-
-#define DEVICE_NAME "ddv"
-#define DEVICE_REQUEST ddv_request
-#define DEVICE_NR(device) (MINOR(device)>>PARTN_BITS)
-
-#elif (MAJOR_NR == MFM_ACORN_MAJOR)
-
-#define DEVICE_NAME "mfm disk"
-#define DEVICE_INTR do_mfm
-#define DEVICE_REQUEST do_mfm_request
-#define DEVICE_NR(device) (MINOR(device) >> 6)
-
-#elif (MAJOR_NR == NBD_MAJOR)
-
-#define DEVICE_NAME "nbd"
-#define DEVICE_REQUEST do_nbd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MDISK_MAJOR)
-
-#define DEVICE_NAME "mdisk"
-#define DEVICE_REQUEST mdisk_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == DASD_MAJOR)
-
-#define DEVICE_NAME "dasd"
-#define DEVICE_REQUEST do_dasd_request
-#define DEVICE_NR(device) (MINOR(device) >> PARTN_BITS)
-
-#elif (MAJOR_NR == I2O_MAJOR)
-
-#define DEVICE_NAME "I2O block"
-#define DEVICE_REQUEST i2ob_request
-#define DEVICE_NR(device) (MINOR(device)>>4)
-
-#elif (MAJOR_NR == COMPAQ_SMART2_MAJOR)
-
-#define DEVICE_NAME "ida"
-#define TIMEOUT_VALUE (25*HZ)
-#define DEVICE_REQUEST do_ida_request
-#define DEVICE_NR(device) (MINOR(device) >> 4)
-
-#elif (MAJOR_NR == XLBLK_MAJOR)
-
-#define DEVICE_NAME "xeno disk"
-#define DEVICE_REQUEST do_xlblk_request
-/* #define DEVICE_INTR */
-#define DEVICE_NR(device) (MINOR(device))
-
-#endif /* MAJOR_NR == whatever */
-
-/* provide DEVICE_xxx defaults, if not explicitly defined
- * above in the MAJOR_NR==xxx if-elif tree */
-#ifndef DEVICE_ON
-#define DEVICE_ON(device) do {} while (0)
-#endif
-#ifndef DEVICE_OFF
-#define DEVICE_OFF(device) do {} while (0)
-#endif
-
-#if (MAJOR_NR != SCSI_TAPE_MAJOR) && (MAJOR_NR != OSST_MAJOR)
-#if !defined(IDE_DRIVER)
-
-#ifndef CURRENT
-#define CURRENT blkdev_entry_next_request(&blk_dev[MAJOR_NR].request_queue.queue_head)
-#endif
-#ifndef QUEUE_EMPTY
-#define QUEUE_EMPTY list_empty(&blk_dev[MAJOR_NR].request_queue.queue_head)
-#endif
-
-#ifndef DEVICE_NAME
-#define DEVICE_NAME "unknown"
-#endif
-
-#define CURRENT_DEV DEVICE_NR(CURRENT->rq_dev)
-
-#ifdef DEVICE_INTR
-static void (*DEVICE_INTR)(void) = NULL;
-#endif
-
-#define SET_INTR(x) (DEVICE_INTR = (x))
-
-#ifdef DEVICE_REQUEST
-static void (DEVICE_REQUEST)(request_queue_t *);
-#endif 
-  
-#ifdef DEVICE_INTR
-#define CLEAR_INTR SET_INTR(NULL)
-#else
-#define CLEAR_INTR
-#endif
-
-#define INIT_REQUEST \
-       if (QUEUE_EMPTY) {\
-               CLEAR_INTR; \
-               return; \
-       } \
-       if (MAJOR(CURRENT->rq_dev) != MAJOR_NR) \
-               panic(DEVICE_NAME ": request list destroyed"); \
-       if (CURRENT->bh) { \
-               if (!buffer_locked(CURRENT->bh)) \
-                       panic(DEVICE_NAME ": block not locked"); \
-       }
-
-#endif /* !defined(IDE_DRIVER) */
-
-
-#ifndef LOCAL_END_REQUEST      /* If we have our own end_request, we do not want to include this mess */
-
-#if ! SCSI_BLK_MAJOR(MAJOR_NR) && (MAJOR_NR != COMPAQ_SMART2_MAJOR)
-
-static inline void end_request(int uptodate) {
-       struct request *req = CURRENT;
-
-       if (end_that_request_first(req, uptodate, DEVICE_NAME))
-               return;
-
-#ifndef DEVICE_NO_RANDOM
-       add_blkdev_randomness(MAJOR(req->rq_dev));
-#endif
-       DEVICE_OFF(req->rq_dev);
-       blkdev_dequeue_request(req);
-       end_that_request_last(req);
-}
-
-#endif /* ! SCSI_BLK_MAJOR(MAJOR_NR) */
-#endif /* LOCAL_END_REQUEST */
-
-#endif /* (MAJOR_NR != SCSI_TAPE_MAJOR) */
-#endif /* defined(MAJOR_NR) || defined(IDE_DRIVER) */
-
-#endif /* _BLK_H */
diff --git a/old/xenolinux-2.4.16-sparse/include/linux/major.h b/old/xenolinux-2.4.16-sparse/include/linux/major.h
deleted file mode 100644 (file)
index 820bf68..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#ifndef _LINUX_MAJOR_H
-#define _LINUX_MAJOR_H
-
-/*
- * This file has definitions for major device numbers.
- * For the device number assignments, see Documentation/devices.txt.
- */
-
-/* limits */
-
-/*
- * Important: Don't change this to 256.  Major number 255 is and must be
- * reserved for future expansion into a larger dev_t space.
- */
-#define MAX_CHRDEV     255
-#define MAX_BLKDEV     255
-
-#define UNNAMED_MAJOR  0
-#define MEM_MAJOR      1
-#define RAMDISK_MAJOR  1
-#define FLOPPY_MAJOR   2
-#define PTY_MASTER_MAJOR 2
-#define IDE0_MAJOR     3
-#define PTY_SLAVE_MAJOR 3
-#define HD_MAJOR       IDE0_MAJOR
-#define TTY_MAJOR      4
-#define TTYAUX_MAJOR   5
-#define LP_MAJOR       6
-#define VCS_MAJOR      7
-#define LOOP_MAJOR     7
-#define SCSI_DISK0_MAJOR 8
-#define SCSI_TAPE_MAJOR        9
-#define MD_MAJOR        9
-#define MISC_MAJOR     10
-#define SCSI_CDROM_MAJOR 11
-#define QIC02_TAPE_MAJOR 12
-#define XT_DISK_MAJOR  13
-#define SOUND_MAJOR    14
-#define CDU31A_CDROM_MAJOR 15
-#define JOYSTICK_MAJOR 15
-#define GOLDSTAR_CDROM_MAJOR 16
-#define OPTICS_CDROM_MAJOR 17
-#define SANYO_CDROM_MAJOR 18
-#define CYCLADES_MAJOR  19
-#define CYCLADESAUX_MAJOR 20
-#define MITSUMI_X_CDROM_MAJOR 20
-#define MFM_ACORN_MAJOR 21     /* ARM Linux /dev/mfm */
-#define SCSI_GENERIC_MAJOR 21
-#define Z8530_MAJOR 34
-#define DIGI_MAJOR 23
-#define IDE1_MAJOR     22
-#define DIGICU_MAJOR 22
-#define MITSUMI_CDROM_MAJOR 23
-#define CDU535_CDROM_MAJOR 24
-#define STL_SERIALMAJOR 24
-#define MATSUSHITA_CDROM_MAJOR 25
-#define STL_CALLOUTMAJOR 25
-#define MATSUSHITA_CDROM2_MAJOR 26
-#define QIC117_TAPE_MAJOR 27
-#define MATSUSHITA_CDROM3_MAJOR 27
-#define MATSUSHITA_CDROM4_MAJOR 28
-#define STL_SIOMEMMAJOR 28
-#define ACSI_MAJOR     28
-#define AZTECH_CDROM_MAJOR 29
-#define GRAPHDEV_MAJOR 29      /* SparcLinux & Linux/68k /dev/fb */
-#define SHMIQ_MAJOR    85      /* Linux/mips, SGI /dev/shmiq */
-#define CM206_CDROM_MAJOR 32
-#define IDE2_MAJOR     33
-#define IDE3_MAJOR     34
-#define XPRAM_MAJOR     35      /* expanded storage on S/390 = "slow ram" */
-                                /* proposed by Peter                      */
-#define NETLINK_MAJOR  36
-#define PS2ESDI_MAJOR  36
-#define IDETAPE_MAJOR  37
-#define Z2RAM_MAJOR    37
-#define APBLOCK_MAJOR   38   /* AP1000 Block device */
-#define DDV_MAJOR       39   /* AP1000 DDV block device */
-#define NBD_MAJOR      43   /* Network block device    */
-#define RISCOM8_NORMAL_MAJOR 48
-#define DAC960_MAJOR   48      /* 48..55 */
-#define RISCOM8_CALLOUT_MAJOR 49
-#define MKISS_MAJOR    55
-#define DSP56K_MAJOR    55   /* DSP56001 processor device */
-
-#define IDE4_MAJOR     56
-#define IDE5_MAJOR     57
-
-#define LVM_BLK_MAJOR  58      /* Logical Volume Manager */
-
-#define SCSI_DISK1_MAJOR       65
-#define SCSI_DISK2_MAJOR       66
-#define SCSI_DISK3_MAJOR       67
-#define SCSI_DISK4_MAJOR       68
-#define SCSI_DISK5_MAJOR       69
-#define SCSI_DISK6_MAJOR       70
-#define SCSI_DISK7_MAJOR       71
-
-
-#define COMPAQ_SMART2_MAJOR    72
-#define COMPAQ_SMART2_MAJOR1   73
-#define COMPAQ_SMART2_MAJOR2   74
-#define COMPAQ_SMART2_MAJOR3   75
-#define COMPAQ_SMART2_MAJOR4   76
-#define COMPAQ_SMART2_MAJOR5   77
-#define COMPAQ_SMART2_MAJOR6   78
-#define COMPAQ_SMART2_MAJOR7   79
-
-#define SPECIALIX_NORMAL_MAJOR 75
-#define SPECIALIX_CALLOUT_MAJOR 76
-
-#define COMPAQ_CISS_MAJOR      104
-#define COMPAQ_CISS_MAJOR1     105
-#define COMPAQ_CISS_MAJOR2      106
-#define COMPAQ_CISS_MAJOR3      107
-#define COMPAQ_CISS_MAJOR4      108
-#define COMPAQ_CISS_MAJOR5      109
-#define COMPAQ_CISS_MAJOR6      110
-#define COMPAQ_CISS_MAJOR7      111
-
-#define ATARAID_MAJOR          114
-
-#define DASD_MAJOR      94     /* Official assignations from Peter */
-
-#define MDISK_MAJOR     95     /* Official assignations from Peter */
-
-#define I2O_MAJOR              80      /* 80->87 */
-
-#define IDE6_MAJOR     88
-#define IDE7_MAJOR     89
-#define IDE8_MAJOR     90
-#define IDE9_MAJOR     91
-
-#define UBD_MAJOR      98
-
-#define AURORA_MAJOR 79
-
-#define JSFD_MAJOR     99
-
-#define PHONE_MAJOR    100
-
-#define LVM_CHAR_MAJOR 109     /* Logical Volume Manager */
-
-#define        UMEM_MAJOR      116     /* http://www.umem.com/ Battery Backed RAM */
-
-#define XLBLK_MAJOR    123     /* XenoLinux Block Device */
-
-#define RTF_MAJOR      150
-#define RAW_MAJOR      162
-
-#define USB_ACM_MAJOR          166
-#define USB_ACM_AUX_MAJOR      167
-#define USB_CHAR_MAJOR         180
-
-#define UNIX98_PTY_MASTER_MAJOR        128
-#define UNIX98_PTY_MAJOR_COUNT 8
-#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
-
-#define VXVM_MAJOR             199     /* VERITAS volume i/o driver    */
-#define VXSPEC_MAJOR           200     /* VERITAS volume config driver */
-#define VXDMP_MAJOR            201     /* VERITAS volume multipath driver */
-
-#define MSR_MAJOR              202
-#define CPUID_MAJOR            203
-
-#define OSST_MAJOR     206     /* OnStream-SCx0 SCSI tape */
-
-#define IBM_TTY3270_MAJOR       227    /* Official allocations now */
-#define IBM_FS3270_MAJOR        228
-
-/*
- * Tests for SCSI devices.
- */
-
-#define SCSI_DISK_MAJOR(M) ((M) == SCSI_DISK0_MAJOR || \
-  ((M) >= SCSI_DISK1_MAJOR && (M) <= SCSI_DISK7_MAJOR))
-  
-#define SCSI_BLK_MAJOR(M) \
-  (SCSI_DISK_MAJOR(M)  \
-   || (M) == SCSI_CDROM_MAJOR)
-
-static __inline__ int scsi_blk_major(int m) {
-       return SCSI_BLK_MAJOR(m);
-}
-
-/*
- * Tests for IDE devices
- */
-#define IDE_DISK_MAJOR(M)      ((M) == IDE0_MAJOR || (M) == IDE1_MAJOR || \
-                               (M) == IDE2_MAJOR || (M) == IDE3_MAJOR || \
-                               (M) == IDE4_MAJOR || (M) == IDE5_MAJOR || \
-                               (M) == IDE6_MAJOR || (M) == IDE7_MAJOR || \
-                               (M) == IDE8_MAJOR || (M) == IDE9_MAJOR)
-
-static __inline__ int ide_blk_major(int m)
-{
-       return IDE_DISK_MAJOR(m);
-}
-
-#endif
diff --git a/old/xenolinux-2.4.16-sparse/include/linux/sunrpc/debug.h b/old/xenolinux-2.4.16-sparse/include/linux/sunrpc/debug.h
deleted file mode 100644 (file)
index 67dbfb8..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * linux/include/linux/sunrpc/debug.h
- *
- * Debugging support for sunrpc module
- *
- * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
- */
-
-#ifndef _LINUX_SUNRPC_DEBUG_H_
-#define _LINUX_SUNRPC_DEBUG_H_
-
-#include <linux/config.h>
-
-#include <linux/timer.h>
-#include <linux/tqueue.h>
-
-/*
- * Enable RPC debugging/profiling.
- */
-/*#ifdef CONFIG_SYSCTL*/
-/*#define  RPC_DEBUG*/
-/*#endif*/
-/* #define  RPC_PROFILE */
-
-/*
- * RPC debug facilities
- */
-#define RPCDBG_XPRT            0x0001
-#define RPCDBG_CALL            0x0002
-#define RPCDBG_DEBUG           0x0004
-#define RPCDBG_NFS             0x0008
-#define RPCDBG_AUTH            0x0010
-#define RPCDBG_PMAP            0x0020
-#define RPCDBG_SCHED           0x0040
-#define RPCDBG_SVCSOCK         0x0100
-#define RPCDBG_SVCDSP          0x0200
-#define RPCDBG_MISC            0x0400
-#define RPCDBG_ALL             0x7fff
-
-#ifdef __KERNEL__
-
-/*
- * Debugging macros etc
- */
-#ifdef RPC_DEBUG
-extern unsigned int            rpc_debug;
-extern unsigned int            nfs_debug;
-extern unsigned int            nfsd_debug;
-extern unsigned int            nlm_debug;
-#endif
-
-#define dprintk(args...)       dfprintk(FACILITY, ## args)
-
-#undef ifdebug
-#ifdef RPC_DEBUG                       
-# define ifdebug(fac)          if (rpc_debug & RPCDBG_##fac)
-# define dfprintk(fac, args...)        do { ifdebug(fac) printk(args); } while(0)
-# define RPC_IFDEBUG(x)                x
-#else
-# define dfprintk(fac, args...)        do ; while (0)
-# define RPC_IFDEBUG(x)
-#endif
-
-#ifdef RPC_PROFILE
-# define pprintk(args...)      printk(## args)
-#else
-# define pprintk(args...)      do ; while (0)
-#endif
-
-/*
- * Sysctl interface for RPC debugging
- */
-#ifdef RPC_DEBUG
-void           rpc_register_sysctl(void);
-void           rpc_unregister_sysctl(void);
-#endif
-
-#endif /* __KERNEL__ */
-
-/*
- * Declarations for the sysctl debug interface, which allows to read or
- * change the debug flags for rpc, nfs, nfsd, and lockd. Since the sunrpc
- * module currently registers its sysctl table dynamically, the sysctl path
- * for module FOO is <CTL_SUNRPC, CTL_FOODEBUG>.
- */
-#define CTL_SUNRPC     7249    /* arbitrary and hopefully unused */
-
-enum {
-       CTL_RPCDEBUG = 1,
-       CTL_NFSDEBUG,
-       CTL_NFSDDEBUG,
-       CTL_NLMDEBUG,
-};
-
-#endif /* _LINUX_SUNRPC_DEBUG_H_ */
diff --git a/old/xenolinux-2.4.16-sparse/init/main.c b/old/xenolinux-2.4.16-sparse/init/main.c
deleted file mode 100644 (file)
index f2047ce..0000000
+++ /dev/null
@@ -1,871 +0,0 @@
-/*
- *  linux/init/main.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- *
- *  GK 2/5/95  -  Changed to support mounting root fs via NFS
- *  Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96
- *  Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96
- *  Simplified starting of init:  Michael A. Griffith <grif@acm.org> 
- */
-
-#define __KERNEL_SYSCALLS__
-
-#include <linux/config.h>
-#include <linux/proc_fs.h>
-#include <linux/devfs_fs_kernel.h>
-#include <linux/unistd.h>
-#include <linux/string.h>
-#include <linux/ctype.h>
-#include <linux/delay.h>
-#include <linux/utsname.h>
-#include <linux/ioport.h>
-#include <linux/init.h>
-#include <linux/smp_lock.h>
-#include <linux/blk.h>
-#include <linux/hdreg.h>
-#include <linux/iobuf.h>
-#include <linux/bootmem.h>
-#include <linux/tty.h>
-
-#include <asm/io.h>
-#include <asm/bugs.h>
-
-#if defined(CONFIG_ARCH_S390)
-#include <asm/s390mach.h>
-#include <asm/ccwcache.h>
-#endif
-
-#ifdef CONFIG_PCI
-#include <linux/pci.h>
-#endif
-
-#ifdef CONFIG_DIO
-#include <linux/dio.h>
-#endif
-
-#ifdef CONFIG_ZORRO
-#include <linux/zorro.h>
-#endif
-
-#ifdef CONFIG_MTRR
-#  include <asm/mtrr.h>
-#endif
-
-#ifdef CONFIG_NUBUS
-#include <linux/nubus.h>
-#endif
-
-#ifdef CONFIG_ISAPNP
-#include <linux/isapnp.h>
-#endif
-
-#ifdef CONFIG_IRDA
-extern int irda_proto_init(void);
-extern int irda_device_init(void);
-#endif
-
-#ifdef CONFIG_X86_LOCAL_APIC
-#include <asm/smp.h>
-#endif
-
-#if defined(CONFIG_KDB)
-#include <linux/kdb.h>
-#endif
-
-/*
- * Versions of gcc older than that listed below may actually compile
- * and link okay, but the end product can have subtle run time bugs.
- * To avoid associated bogus bug reports, we flatly refuse to compile
- * with a gcc that is known to be too old from the very beginning.
- */
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 91)
-#error Sorry, your GCC is too old. It builds incorrect kernels.
-#endif
-
-extern char _stext, _etext;
-extern char *linux_banner;
-
-static int init(void *);
-
-extern void init_IRQ(void);
-extern void init_modules(void);
-extern void sock_init(void);
-extern void fork_init(unsigned long);
-extern void mca_init(void);
-extern void sbus_init(void);
-extern void ppc_init(void);
-extern void sysctl_init(void);
-extern void signals_init(void);
-extern int init_pcmcia_ds(void);
-
-extern void free_initmem(void);
-
-#ifdef CONFIG_TC
-extern void tc_init(void);
-#endif
-
-extern void ecard_init(void);
-
-#if defined(CONFIG_SYSVIPC)
-extern void ipc_init(void);
-#endif
-
-/*
- * Boot command-line arguments
- */
-#define MAX_INIT_ARGS 8
-#define MAX_INIT_ENVS 8
-
-extern void time_init(void);
-extern void softirq_init(void);
-
-int rows, cols;
-
-#ifdef CONFIG_BLK_DEV_INITRD
-unsigned int real_root_dev;    /* do_proc_dointvec cannot handle kdev_t */
-#endif
-
-int root_mountflags = MS_RDONLY;
-char *execute_command;
-char root_device_name[64];
-
-
-static char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
-static char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
-
-static int __init profile_setup(char *str)
-{
-    int par;
-    if (get_option(&str,&par)) prof_shift = par;
-       return 1;
-}
-
-__setup("profile=", profile_setup);
-
-
-static struct dev_name_struct {
-       const char *name;
-       const int num;
-} root_dev_names[] __initdata = {
-       { "nfs",     0x00ff },
-    { "xhda",    0x7b00 },
-       { "hda",     0x0300 },
-       { "hdb",     0x0340 },
-       { "loop",    0x0700 },
-       { "hdc",     0x1600 },
-       { "hdd",     0x1640 },
-       { "hde",     0x2100 },
-       { "hdf",     0x2140 },
-       { "hdg",     0x2200 },
-       { "hdh",     0x2240 },
-       { "hdi",     0x3800 },
-       { "hdj",     0x3840 },
-       { "hdk",     0x3900 },
-       { "hdl",     0x3940 },
-       { "hdm",     0x5800 },
-       { "hdn",     0x5840 },
-       { "hdo",     0x5900 },
-       { "hdp",     0x5940 },
-       { "hdq",     0x5A00 },
-       { "hdr",     0x5A40 },
-       { "hds",     0x5B00 },
-       { "hdt",     0x5B40 },
-       { "sda",     0x0800 },
-       { "sdb",     0x0810 },
-       { "sdc",     0x0820 },
-       { "sdd",     0x0830 },
-       { "sde",     0x0840 },
-       { "sdf",     0x0850 },
-       { "sdg",     0x0860 },
-       { "sdh",     0x0870 },
-       { "sdi",     0x0880 },
-       { "sdj",     0x0890 },
-       { "sdk",     0x08a0 },
-       { "sdl",     0x08b0 },
-       { "sdm",     0x08c0 },
-       { "sdn",     0x08d0 },
-       { "sdo",     0x08e0 },
-       { "sdp",     0x08f0 },
-       { "ada",     0x1c00 },
-       { "adb",     0x1c10 },
-       { "adc",     0x1c20 },
-       { "add",     0x1c30 },
-       { "ade",     0x1c40 },
-       { "fd",      0x0200 },
-       { "md",      0x0900 },       
-       { "xda",     0x0d00 },
-       { "xdb",     0x0d40 },
-       { "ram",     0x0100 },
-       { "scd",     0x0b00 },
-       { "mcd",     0x1700 },
-       { "cdu535",  0x1800 },
-       { "sonycd",  0x1800 },
-       { "aztcd",   0x1d00 },
-       { "cm206cd", 0x2000 },
-       { "gscd",    0x1000 },
-       { "sbpcd",   0x1900 },
-       { "eda",     0x2400 },
-       { "edb",     0x2440 },
-       { "pda",        0x2d00 },
-       { "pdb",        0x2d10 },
-       { "pdc",        0x2d20 },
-       { "pdd",        0x2d30 },
-       { "pcd",        0x2e00 },
-       { "pf",         0x2f00 },
-       { "apblock", APBLOCK_MAJOR << 8},
-       { "ddv", DDV_MAJOR << 8},
-       { "jsfd",    JSFD_MAJOR << 8},
-#if defined(CONFIG_ARCH_S390)
-       { "dasda", (DASD_MAJOR << MINORBITS) },
-       { "dasdb", (DASD_MAJOR << MINORBITS) + (1 << 2) },
-       { "dasdc", (DASD_MAJOR << MINORBITS) + (2 << 2) },
-       { "dasdd", (DASD_MAJOR << MINORBITS) + (3 << 2) },
-       { "dasde", (DASD_MAJOR << MINORBITS) + (4 << 2) },
-       { "dasdf", (DASD_MAJOR << MINORBITS) + (5 << 2) },
-       { "dasdg", (DASD_MAJOR << MINORBITS) + (6 << 2) },
-       { "dasdh", (DASD_MAJOR << MINORBITS) + (7 << 2) },
-#endif
-#if defined(CONFIG_BLK_CPQ_DA) || defined(CONFIG_BLK_CPQ_DA_MODULE)
-       { "ida/c0d0p",0x4800 },
-       { "ida/c0d1p",0x4810 },
-       { "ida/c0d2p",0x4820 },
-       { "ida/c0d3p",0x4830 },
-       { "ida/c0d4p",0x4840 },
-       { "ida/c0d5p",0x4850 },
-       { "ida/c0d6p",0x4860 },
-       { "ida/c0d7p",0x4870 },
-       { "ida/c0d8p",0x4880 },
-       { "ida/c0d9p",0x4890 },
-       { "ida/c0d10p",0x48A0 },
-       { "ida/c0d11p",0x48B0 },
-       { "ida/c0d12p",0x48C0 },
-       { "ida/c0d13p",0x48D0 },
-       { "ida/c0d14p",0x48E0 },
-       { "ida/c0d15p",0x48F0 },
-#endif
-#if defined(CONFIG_BLK_CPQ_CISS_DA) || defined(CONFIG_BLK_CPQ_CISS_DA_MODULE)
-       { "cciss/c0d0p",0x6800 },
-       { "cciss/c0d1p",0x6810 },
-       { "cciss/c0d2p",0x6820 },
-       { "cciss/c0d3p",0x6830 },
-       { "cciss/c0d4p",0x6840 },
-       { "cciss/c0d5p",0x6850 },
-       { "cciss/c0d6p",0x6860 },
-       { "cciss/c0d7p",0x6870 },
-       { "cciss/c0d8p",0x6880 },
-       { "cciss/c0d9p",0x6890 },
-       { "cciss/c0d10p",0x68A0 },
-       { "cciss/c0d11p",0x68B0 },
-       { "cciss/c0d12p",0x68C0 },
-       { "cciss/c0d13p",0x68D0 },
-       { "cciss/c0d14p",0x68E0 },
-       { "cciss/c0d15p",0x68F0 },
-#endif
-       { "nftla", 0x5d00 },
-       { "nftlb", 0x5d10 },
-       { "nftlc", 0x5d20 },
-       { "nftld", 0x5d30 },
-       { "ftla", 0x2c00 },
-       { "ftlb", 0x2c08 },
-       { "ftlc", 0x2c10 },
-       { "ftld", 0x2c18 },
-       { "mtdblock", 0x1f00 },
-       { NULL, 0 }
-};
-
-kdev_t __init name_to_kdev_t(char *line)
-{
-       int base = 0;
-
-       if (strncmp(line,"/dev/",5) == 0) {
-               struct dev_name_struct *dev = root_dev_names;
-               line += 5;
-               do {
-                       int len = strlen(dev->name);
-                       if (strncmp(line,dev->name,len) == 0) {
-                               line += len;
-                               base = dev->num;
-                               break;
-                       }
-                       dev++;
-               } while (dev->name);
-       }
-       return to_kdev_t(base + simple_strtoul(line,NULL,base?10:16));
-}
-
-static int __init root_dev_setup(char *line)
-{
-       int i;
-       char ch;
-
-       ROOT_DEV = name_to_kdev_t(line);
-       memset (root_device_name, 0, sizeof root_device_name);
-       if (strncmp (line, "/dev/", 5) == 0) line += 5;
-       for (i = 0; i < sizeof root_device_name - 1; ++i)
-       {
-           ch = line[i];
-           if ( isspace (ch) || (ch == ',') || (ch == '\0') ) break;
-           root_device_name[i] = ch;
-       }
-       return 1;
-}
-
-__setup("root=", root_dev_setup);
-
-static int __init checksetup(char *line)
-{
-       struct kernel_param *p;
-
-       p = &__setup_start;
-       do {
-               int n = strlen(p->str);
-               if (!strncmp(line,p->str,n)) {
-                       if (p->setup_func(line+n))
-                               return 1;
-               }
-               p++;
-       } while (p < &__setup_end);
-       return 0;
-}
-
-/* this should be approx 2 Bo*oMips to start (note initial shift), and will
-   still work even if initially too large, it will just take slightly longer */
-unsigned long loops_per_jiffy = (1<<12);
-
-/* This is the number of bits of precision for the loops_per_jiffy.  Each
-   bit takes on average 1.5/HZ seconds.  This (like the original) is a little
-   better than 1% */
-#define LPS_PREC 8
-
-void __init calibrate_delay(void)
-{
-       unsigned long ticks, loopbit;
-       int lps_precision = LPS_PREC;
-
-       loops_per_jiffy = (1<<12);
-
-       printk("Calibrating delay loop... ");
-       while (loops_per_jiffy <<= 1) {
-               /* wait for "start of" clock tick */
-               ticks = jiffies;
-               while (ticks == jiffies)
-                       /* nothing */;
-               /* Go .. */
-               ticks = jiffies;
-               __delay(loops_per_jiffy);
-               ticks = jiffies - ticks;
-               if (ticks)
-                       break;
-       }
-
-/* Do a binary approximation to get loops_per_jiffy set to equal one clock
-   (up to lps_precision bits) */
-       loops_per_jiffy >>= 1;
-       loopbit = loops_per_jiffy;
-       while ( lps_precision-- && (loopbit >>= 1) ) {
-               loops_per_jiffy |= loopbit;
-               ticks = jiffies;
-               while (ticks == jiffies);
-               ticks = jiffies;
-               __delay(loops_per_jiffy);
-               if (jiffies != ticks)   /* longer than 1 tick */
-                       loops_per_jiffy &= ~loopbit;
-       }
-
-/* Round the value and print it */     
-       printk("%lu.%02lu BogoMIPS\n",
-               loops_per_jiffy/(500000/HZ),
-               (loops_per_jiffy/(5000/HZ)) % 100);
-}
-
-static int __init readonly(char *str)
-{
-       if (*str)
-               return 0;
-       root_mountflags |= MS_RDONLY;
-       return 1;
-}
-
-static int __init readwrite(char *str)
-{
-       if (*str)
-               return 0;
-       root_mountflags &= ~MS_RDONLY;
-       return 1;
-}
-
-static int __init debug_kernel(char *str)
-{
-       if (*str)
-               return 0;
-       console_loglevel = 10;
-       return 1;
-}
-
-static int __init quiet_kernel(char *str)
-{
-       if (*str)
-               return 0;
-       console_loglevel = 4;
-       return 1;
-}
-
-__setup("ro", readonly);
-__setup("rw", readwrite);
-__setup("debug", debug_kernel);
-__setup("quiet", quiet_kernel);
-
-/*
- * This is a simple kernel command line parsing function: it parses
- * the command line, and fills in the arguments/environment to init
- * as appropriate. Any cmd-line option is taken to be an environment
- * variable if it contains the character '='.
- *
- * This routine also checks for options meant for the kernel.
- * These options are not given to init - they are for internal kernel use only.
- */
-static void __init parse_options(char *line)
-{
-       char *next,*quote;
-       int args, envs;
-
-       if (!*line)
-               return;
-       args = 0;
-       envs = 1;       /* TERM is set to 'linux' by default */
-       next = line;
-       while ((line = next) != NULL) {
-                quote = strchr(line,'"');
-                next = strchr(line, ' ');
-                while (next != NULL && quote != NULL && quote < next) {
-                        /* we found a left quote before the next blank
-                         * now we have to find the matching right quote
-                         */
-                        next = strchr(quote+1, '"');
-                        if (next != NULL) {
-                                quote = strchr(next+1, '"');
-                                next = strchr(next+1, ' ');
-                        }
-                }
-                if (next != NULL)
-                        *next++ = 0;
-#if defined(CONFIG_KDB)
-               /* kdb, kdb=on, kdb=off, kdb=early */
-               if (strncmp(line, "kdb", 3) == 0) {
-                       if (line[3] == '\0') {
-                               /* Backward compatibility, kdb with no option means early activation */
-                               printk("Boot flag kdb with no options is obsolete, use kdb=early\n");
-                               kdb_on = 1;
-                               kdb_flags |= KDB_FLAG_EARLYKDB;
-                               continue;
-                       }
-                       if (line[3] == '=') {
-                               if (strcmp(line+4, "on") == 0) {
-                                       kdb_on = 1;
-                                       continue;
-                               }
-                               if (strcmp(line+4, "off") == 0) {
-                                       kdb_on = 0;
-                                       continue;
-                               }
-                               if (strcmp(line+4, "early") == 0) {
-                                       kdb_on = 1;
-                                       kdb_flags |= KDB_FLAG_EARLYKDB;
-                                       continue;
-                               }
-                               printk("Boot flag %s not recognised, assumed to be environment variable\n", line);
-                       }
-               }
-#endif
-               if (!strncmp(line,"init=",5)) {
-                       line += 5;
-                       execute_command = line;
-                       /* In case LILO is going to boot us with default command line,
-                        * it prepends "auto" before the whole cmdline which makes
-                        * the shell think it should execute a script with such name.
-                        * So we ignore all arguments entered _before_ init=... [MJ]
-                        */
-                       args = 0;
-                       continue;
-               }
-               if (checksetup(line))
-                       continue;
-               
-               /*
-                * Then check if it's an environment variable or
-                * an option.
-                */
-               if (strchr(line,'=')) {
-                       if (envs >= MAX_INIT_ENVS)
-                               break;
-                       envp_init[++envs] = line;
-               } else {
-                       if (args >= MAX_INIT_ARGS)
-                               break;
-                       if (*line)
-                               argv_init[++args] = line;
-               }
-       }
-       argv_init[args+1] = NULL;
-       envp_init[envs+1] = NULL;
-}
-
-
-extern void setup_arch(char **);
-extern void cpu_idle(void);
-
-unsigned long wait_init_idle;
-
-#ifndef CONFIG_SMP
-
-#ifdef CONFIG_X86_LOCAL_APIC
-static void __init smp_init(void)
-{
-       APIC_init_uniprocessor();
-}
-#else
-#define smp_init()     do { } while (0)
-#endif
-
-#else
-
-
-/* Called by boot processor to activate the rest. */
-static void __init smp_init(void)
-{
-       /* Get other processors into their bootup holding patterns. */
-       smp_boot_cpus();
-       wait_init_idle = cpu_online_map;
-       clear_bit(current->processor, &wait_init_idle); /* Don't wait on me! */
-
-       smp_threads_ready=1;
-       smp_commence();
-
-       /* Wait for the other cpus to set up their idle processes */
-       printk("Waiting on wait_init_idle (map = 0x%lx)\n", wait_init_idle);
-       while (wait_init_idle) {
-               cpu_relax();
-               barrier();
-       }
-       printk("All processors have done init_idle\n");
-}
-
-#endif
-
-/*
- * We need to finalize in a non-__init function or else race conditions
- * between the root thread and the init thread may cause start_kernel to
- * be reaped by free_initmem before the root thread has proceeded to
- * cpu_idle.
- */
-
-static void rest_init(void)
-{
-       kernel_thread(init, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL);
-       unlock_kernel();
-       current->need_resched = 1;
-       cpu_idle();
-} 
-
-/*
- *     Activate the first processor.
- */
-
-asmlinkage void __init start_kernel(void)
-{
-       char * command_line;
-       unsigned long mempages;
-       extern char saved_command_line[];
-/*
- * Interrupts are still disabled. Do necessary setups, then
- * enable them
- */
-       lock_kernel();
-       printk(linux_banner);
-       setup_arch(&command_line);
-       printk("Kernel command line: %s\n", saved_command_line);
-       parse_options(command_line);
-       trap_init();
-       init_IRQ();
-       sched_init();
-       softirq_init();
-       time_init();
-
-       /*
-        * HACK ALERT! This is early. We're enabling the console before
-        * we've done PCI setups etc, and console_init() must be aware of
-        * this. But we do want output early, in case something goes wrong.
-        */
-       console_init();
-#ifdef CONFIG_MODULES
-       init_modules();
-#endif
-       if (prof_shift) {
-               unsigned int size;
-               /* only text is profiled */
-               prof_len = (unsigned long) &_etext - (unsigned long) &_stext;
-               prof_len >>= prof_shift;
-               
-               size = prof_len * sizeof(unsigned int) + PAGE_SIZE-1;
-               prof_buffer = (unsigned int *) alloc_bootmem(size);
-       }
-
-       kmem_cache_init();
-       sti();
-       calibrate_delay();
-#ifdef CONFIG_BLK_DEV_INITRD
-       if (initrd_start && !initrd_below_start_ok &&
-                       initrd_start < min_low_pfn << PAGE_SHIFT) {
-               printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
-                   "disabling it.\n",initrd_start,min_low_pfn << PAGE_SHIFT);
-               initrd_start = 0;
-       }
-#endif
-       mem_init();
-       kmem_cache_sizes_init();
-#if defined(CONFIG_KDB)
-       kdb_init();
-       if (KDB_FLAG(EARLYKDB)) {
-               KDB_ENTER();
-       }
-#endif
-       mempages = num_physpages;
-
-       fork_init(mempages);
-       proc_caches_init();
-       vfs_caches_init(mempages);
-       buffer_init(mempages);
-       page_cache_init(mempages);
-#if defined(CONFIG_ARCH_S390)
-       ccwcache_init();
-#endif
-       signals_init();
-#ifdef CONFIG_PROC_FS
-       proc_root_init();
-#endif
-#if defined(CONFIG_SYSVIPC)
-       ipc_init();
-#endif
-       check_bugs();
-       printk("POSIX conformance testing by UNIFIX\n");
-
-       /* 
-        *      We count on the initial thread going ok 
-        *      Like idlers init is an unlocked kernel thread, which will
-        *      make syscalls (and thus be locked).
-        */
-       smp_init();
-       rest_init();
-}
-
-#ifdef CONFIG_BLK_DEV_INITRD
-static int do_linuxrc(void * shell)
-{
-       static char *argv[] = { "linuxrc", NULL, };
-
-       close(0);close(1);close(2);
-       setsid();
-       (void) open("/dev/console",O_RDWR,0);
-       (void) dup(0);
-       (void) dup(0);
-       return execve(shell, argv, envp_init);
-}
-
-#endif
-
-struct task_struct *child_reaper = &init_task;
-
-static void __init do_initcalls(void)
-{
-       initcall_t *call;
-
-       call = &__initcall_start;
-       do {
-               (*call)();
-               call++;
-       } while (call < &__initcall_end);
-
-       /* Make sure there is no pending stuff from the initcall sequence */
-       flush_scheduled_tasks();
-}
-
-/*
- * Ok, the machine is now initialized. None of the devices
- * have been touched yet, but the CPU subsystem is up and
- * running, and memory and process management works.
- *
- * Now we can finally start doing some real work..
- */
-static void __init do_basic_setup(void)
-{
-
-       /*
-        * Tell the world that we're going to be the grim
-        * reaper of innocent orphaned children.
-        *
-        * We don't want people to have to make incorrect
-        * assumptions about where in the task array this
-        * can be found.
-        */
-       child_reaper = current;
-
-#if defined(CONFIG_MTRR)       /* Do this after SMP initialization */
-/*
- * We should probably create some architecture-dependent "fixup after
- * everything is up" style function where this would belong better
- * than in init/main.c..
- */
-       mtrr_init();
-#endif
-
-#ifdef CONFIG_SYSCTL
-       sysctl_init();
-#endif
-
-       /*
-        * Ok, at this point all CPU's should be initialized, so
-        * we can start looking into devices..
-        */
-#if defined(CONFIG_ARCH_S390)
-       s390_init_machine_check();
-#endif
-
-#ifdef CONFIG_PCI
-       pci_init();
-#endif
-#ifdef CONFIG_SBUS
-       sbus_init();
-#endif
-#if defined(CONFIG_PPC)
-       ppc_init();
-#endif
-#ifdef CONFIG_MCA
-       mca_init();
-#endif
-#ifdef CONFIG_ARCH_ACORN
-       ecard_init();
-#endif
-#ifdef CONFIG_ZORRO
-       zorro_init();
-#endif
-#ifdef CONFIG_DIO
-       dio_init();
-#endif
-#ifdef CONFIG_NUBUS
-       nubus_init();
-#endif
-#ifdef CONFIG_ISAPNP
-       isapnp_init();
-#endif
-#ifdef CONFIG_TC
-       tc_init();
-#endif
-
-       /* Networking initialization needs a process context */ 
-       sock_init();
-
-       start_context_thread();
-       do_initcalls();
-
-#ifdef CONFIG_IRDA
-       irda_proto_init();
-       irda_device_init(); /* Must be done after protocol initialization */
-#endif
-#ifdef CONFIG_PCMCIA
-       init_pcmcia_ds();               /* Do this last */
-#endif
-}
-
-extern void rd_load(void);
-extern void initrd_load(void);
-
-/*
- * Prepare the namespace - decide what/where to mount, load ramdisks, etc.
- */
-static void prepare_namespace(void)
-{
-#ifdef CONFIG_BLK_DEV_INITRD
-       int real_root_mountflags = root_mountflags;
-       if (!initrd_start)
-               mount_initrd = 0;
-       if (mount_initrd)
-               root_mountflags &= ~MS_RDONLY;
-       real_root_dev = ROOT_DEV;
-#endif
-
-#ifdef CONFIG_BLK_DEV_RAM
-#ifdef CONFIG_BLK_DEV_INITRD
-       if (mount_initrd)
-               initrd_load();
-       else
-#endif
-       rd_load();
-#endif
-
-       /* Mount the root filesystem.. */
-       mount_root();
-
-       mount_devfs_fs ();
-
-#ifdef CONFIG_BLK_DEV_INITRD
-       root_mountflags = real_root_mountflags;
-       if (mount_initrd && ROOT_DEV != real_root_dev
-           && MAJOR(ROOT_DEV) == RAMDISK_MAJOR && MINOR(ROOT_DEV) == 0) {
-               int error;
-               int i, pid;
-
-               pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
-               if (pid > 0) {
-                       while (pid != wait(&i)) {
-                               current->policy |= SCHED_YIELD;
-                               schedule();
-                       }
-               }
-               if (MAJOR(real_root_dev) != RAMDISK_MAJOR
-                    || MINOR(real_root_dev) != 0) {
-                       error = change_root(real_root_dev,"/initrd");
-                       if (error)
-                               printk(KERN_ERR "Change root to /initrd: "
-                                   "error %d\n",error);
-               }
-       }
-#endif
-}
-
-static int init(void * unused)
-{
-       lock_kernel();
-       do_basic_setup();
-
-       prepare_namespace();
-
-       /*
-        * Ok, we have completed the initial bootup, and
-        * we're essentially up and running. Get rid of the
-        * initmem segments and start the user-mode stuff..
-        */
-       free_initmem();
-       unlock_kernel();
-
-       if (open("/dev/console", O_RDWR, 0) < 0)
-               printk("Warning: unable to open an initial console.\n");
-
-       (void) dup(0);
-       (void) dup(0);
-       
-       /*
-        * We try each of these until one succeeds.
-        *
-        * The Bourne shell can be used instead of init if we are 
-        * trying to recover a really broken machine.
-        */
-
-       if (execute_command)
-               execve(execute_command,argv_init,envp_init);
-       execve("/sbin/init",argv_init,envp_init);
-       execve("/etc/init",argv_init,envp_init);
-       execve("/bin/init",argv_init,envp_init);
-       execve("/bin/sh",argv_init,envp_init);
-       panic("No init found.  Try passing init= option to kernel.");
-}
diff --git a/old/xenolinux-2.4.16-sparse/kernel/panic.c b/old/xenolinux-2.4.16-sparse/kernel/panic.c
deleted file mode 100644 (file)
index 8a7237f..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  linux/kernel/panic.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- */
-
-/*
- * This function is used through-out the kernel (including mm and fs)
- * to indicate a major problem.
- */
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/delay.h>
-#include <linux/reboot.h>
-#include <linux/notifier.h>
-#include <linux/init.h>
-#include <linux/sysrq.h>
-#include <linux/interrupt.h>
-
-asmlinkage void sys_sync(void);        /* it's really int */
-
-int panic_timeout;
-
-struct notifier_block *panic_notifier_list;
-
-static int __init panic_setup(char *str)
-{
-       panic_timeout = simple_strtoul(str, NULL, 0);
-       return 1;
-}
-
-__setup("panic=", panic_setup);
-
-/**
- *     panic - halt the system
- *     @fmt: The text string to print
- *
- *     Display a message, then perform cleanups. Functions in the panic
- *     notifier list are called after the filesystem cache is flushed (when possible).
- *
- *     This function never returns.
- */
-NORET_TYPE void panic(const char * fmt, ...)
-{
-       static char buf[1024];
-       va_list args;
-#if defined(CONFIG_ARCH_S390)
-        unsigned long caller = (unsigned long) __builtin_return_address(0);
-#endif
-
-       bust_spinlocks(1);
-       va_start(args, fmt);
-       vsprintf(buf, fmt, args);
-       va_end(args);
-       printk(KERN_EMERG "Kernel panic: %s\n",buf);
-       if (in_interrupt())
-               printk(KERN_EMERG "In interrupt handler - not syncing\n");
-       else if (!current->pid)
-               printk(KERN_EMERG "In idle task - not syncing\n");
-       else
-               sys_sync();
-       bust_spinlocks(0);
-
-#ifdef CONFIG_SMP
-       smp_send_stop();
-#endif
-
-       notifier_call_chain(&panic_notifier_list, 0, NULL);
-
-       if (panic_timeout > 0)
-       {
-               /*
-                * Delay timeout seconds before rebooting the machine. 
-                * We can't use the "normal" timers since we just panicked..
-                */
-               printk(KERN_EMERG "Rebooting in %d seconds..",panic_timeout);
-               mdelay(panic_timeout*1000);
-               /*
-                *      Should we run the reboot notifier. For the moment Im
-                *      choosing not too. It might crash, be corrupt or do
-                *      more harm than good for other reasons.
-                */
-               machine_restart(NULL);
-       }
-#ifdef __sparc__
-       {
-               extern int stop_a_enabled;
-               /* Make sure the user can actually press L1-A */
-               stop_a_enabled = 1;
-               printk("Press L1-A to return to the boot prom\n");
-       }
-#endif
-#if defined(CONFIG_ARCH_S390)
-        disabled_wait(caller);
-#endif
-       sti();
-       for(;;) {
-               CHECK_EMERGENCY_SYNC
-#if defined(CONFIG_XENO)
-                HYPERVISOR_exit();
-#endif
-       }
-}
-
-/**
- *     print_tainted - return a string to represent the kernel taint state.
- *
- *     The string is overwritten by the next call to print_taint().
- */
-const char *print_tainted()
-{
-       static char buf[20];
-       if (tainted) {
-               snprintf(buf, sizeof(buf), "Tainted: %c%c",
-                       tainted & 1 ? 'P' : 'G',
-                       tainted & 2 ? 'F' : ' ');
-       }
-       else
-               snprintf(buf, sizeof(buf), "Not tainted");
-       return(buf);
-}
-
-int tainted = 0;
diff --git a/old/xenolinux-2.4.16-sparse/mk b/old/xenolinux-2.4.16-sparse/mk
deleted file mode 100755 (executable)
index 70cb988..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-export INSTALL_MOD_PATH=/local/scratch/kaf24/xeno/linux-install
-ARCH=xeno make -j 4 bzImage
-ARCH=xeno make -j 4 modules
-ARCH=xeno INSTALL_MOD_PATH=/anfs/nta3/xeno-roots/kaf24/root0 really make modules_install
-ARCH=xeno INSTALL_MOD_PATH=/anfs/nta3/xeno-roots/kaf24/root1 really make modules_install
-cp arch/xeno/boot/image.gz /usr/groups/pegasus/boot/kaf24/meteors/vmlinux.gz
diff --git a/old/xenolinux-2.4.16-sparse/mm/memory.c b/old/xenolinux-2.4.16-sparse/mm/memory.c
deleted file mode 100644 (file)
index 58eb472..0000000
+++ /dev/null
@@ -1,1442 +0,0 @@
-/*
- *  linux/mm/memory.c
- *
- *  Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds
- */
-
-/*
- * demand-loading started 01.12.91 - seems it is high on the list of
- * things wanted, and it should be easy to implement. - Linus
- */
-
-/*
- * Ok, demand-loading was easy, shared pages a little bit tricker. Shared
- * pages started 02.12.91, seems to work. - Linus.
- *
- * Tested sharing by executing about 30 /bin/sh: under the old kernel it
- * would have taken more than the 6M I have free, but it worked well as
- * far as I could see.
- *
- * Also corrected some "invalidate()"s - I wasn't doing enough of them.
- */
-
-/*
- * Real VM (paging to/from disk) started 18.12.91. Much more work and
- * thought has to go into this. Oh, well..
- * 19.12.91  -  works, somewhat. Sometimes I get faults, don't know why.
- *             Found it. Everything seems to work now.
- * 20.12.91  -  Ok, making the swap-device changeable like the root.
- */
-
-/*
- * 05.04.94  -  Multi-page memory management added for v1.1.
- *             Idea by Alex Bligh (alex@cconcepts.co.uk)
- *
- * 16.07.99  -  Support of BIGMEM added by Gerhard Wichert, Siemens AG
- *             (Gerhard.Wichert@pdb.siemens.de)
- */
-
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-#include <linux/smp_lock.h>
-#include <linux/swapctl.h>
-#include <linux/iobuf.h>
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-
-#include <asm/pgalloc.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-
-unsigned long max_mapnr;
-unsigned long num_physpages;
-void * high_memory;
-struct page *highmem_start_page;
-
-/*
- * We special-case the C-O-W ZERO_PAGE, because it's such
- * a common occurrence (no need to read the page to know
- * that it's zero - better for the cache and memory subsystem).
- */
-static inline void copy_cow_page(struct page * from, struct page * to, unsigned long address)
-{
-       if (from == ZERO_PAGE(address)) {
-               clear_user_highpage(to, address);
-               return;
-       }
-       copy_user_highpage(to, from, address);
-}
-
-mem_map_t * mem_map;
-
-/*
- * Called by TLB shootdown 
- */
-void __free_pte(pte_t pte)
-{
-       struct page *page = pte_page(pte);
-       if ((!VALID_PAGE(page)) || PageReserved(page))
-               return;
-       if (pte_dirty(pte))
-               set_page_dirty(page);           
-       free_page_and_swap_cache(page);
-}
-
-
-/*
- * Note: this doesn't free the actual pages themselves. That
- * has been handled earlier when unmapping all the memory regions.
- */
-static inline void free_one_pmd(pmd_t * dir)
-{
-       pte_t * pte;
-
-       if (pmd_none(*dir))
-               return;
-       if (pmd_bad(*dir)) {
-               pmd_ERROR(*dir);
-               pmd_clear(dir);
-               return;
-       }
-       pte = pte_offset(dir, 0);
-       pmd_clear(dir);
-       pte_free(pte);
-}
-
-static inline void free_one_pgd(pgd_t * dir)
-{
-       int j;
-       pmd_t * pmd;
-
-       if (pgd_none(*dir))
-               return;
-       if (pgd_bad(*dir)) {
-               pgd_ERROR(*dir);
-               pgd_clear(dir);
-               return;
-       }
-       pmd = pmd_offset(dir, 0);
-       pgd_clear(dir);
-       for (j = 0; j < PTRS_PER_PMD ; j++) {
-               prefetchw(pmd+j+(PREFETCH_STRIDE/16));
-               free_one_pmd(pmd+j);
-       }
-       pmd_free(pmd);
-}
-
-/* Low and high watermarks for page table cache.
-   The system should try to have pgt_water[0] <= cache elements <= pgt_water[1]
- */
-int pgt_cache_water[2] = { 25, 50 };
-
-/* Returns the number of pages freed */
-int check_pgt_cache(void)
-{
-       return do_check_pgt_cache(pgt_cache_water[0], pgt_cache_water[1]);
-}
-
-
-/*
- * This function clears all user-level page tables of a process - this
- * is needed by execve(), so that old pages aren't in the way.
- */
-void clear_page_tables(struct mm_struct *mm, unsigned long first, int nr)
-{
-       pgd_t * page_dir = mm->pgd;
-
-       spin_lock(&mm->page_table_lock);
-       page_dir += first;
-       do {
-               free_one_pgd(page_dir);
-               page_dir++;
-       } while (--nr);
-       XENO_flush_page_update_queue();
-       spin_unlock(&mm->page_table_lock);
-
-       /* keep the page table cache within bounds */
-       check_pgt_cache();
-}
-
-#define PTE_TABLE_MASK ((PTRS_PER_PTE-1) * sizeof(pte_t))
-#define PMD_TABLE_MASK ((PTRS_PER_PMD-1) * sizeof(pmd_t))
-
-/*
- * copy one vm_area from one task to the other. Assumes the page tables
- * already present in the new task to be cleared in the whole range
- * covered by this vma.
- *
- * 08Jan98 Merged into one routine from several inline routines to reduce
- *         variable count and make things faster. -jj
- *
- * dst->page_table_lock is held on entry and exit,
- * but may be dropped within pmd_alloc() and pte_alloc().
- */
-int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
-                       struct vm_area_struct *vma)
-{
-       pgd_t * src_pgd, * dst_pgd;
-       unsigned long address = vma->vm_start;
-       unsigned long end = vma->vm_end;
-       unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_WRITE)) == VM_WRITE;
-
-       src_pgd = pgd_offset(src, address)-1;
-       dst_pgd = pgd_offset(dst, address)-1;
-
-       for (;;) {
-               pmd_t * src_pmd, * dst_pmd;
-
-               src_pgd++; dst_pgd++;
-               
-               /* copy_pmd_range */
-               
-               if (pgd_none(*src_pgd))
-                       goto skip_copy_pmd_range;
-               if (pgd_bad(*src_pgd)) {
-                       pgd_ERROR(*src_pgd);
-                       pgd_clear(src_pgd);
-skip_copy_pmd_range:   address = (address + PGDIR_SIZE) & PGDIR_MASK;
-                       if (!address || (address >= end))
-                               goto out;
-                       continue;
-               }
-
-               src_pmd = pmd_offset(src_pgd, address);
-               dst_pmd = pmd_alloc(dst, dst_pgd, address);
-               if (!dst_pmd)
-                       goto nomem;
-
-               do {
-                       pte_t * src_pte, * dst_pte;
-               
-                       /* copy_pte_range */
-               
-                       if (pmd_none(*src_pmd))
-                               goto skip_copy_pte_range;
-                       if (pmd_bad(*src_pmd)) {
-                               pmd_ERROR(*src_pmd);
-                               pmd_clear(src_pmd);
-skip_copy_pte_range:           address = (address + PMD_SIZE) & PMD_MASK;
-                               if (address >= end)
-                                       goto out;
-                               goto cont_copy_pmd_range;
-                       }
-
-                       src_pte = pte_offset(src_pmd, address);
-                       dst_pte = pte_alloc(dst, dst_pmd, address);
-                       if (!dst_pte)
-                               goto nomem;
-
-                       spin_lock(&src->page_table_lock);                       
-                       do {
-                               pte_t pte = *src_pte;
-                               struct page *ptepage;
-                               
-                               /* copy_one_pte */
-
-                               if (pte_none(pte))
-                                       goto cont_copy_pte_range_noset;
-                               if (!pte_present(pte)) {
-                                       swap_duplicate(pte_to_swp_entry(pte));
-                                       goto cont_copy_pte_range;
-                               }
-                               ptepage = pte_page(pte);
-                               if ((!VALID_PAGE(ptepage)) || 
-                                   PageReserved(ptepage))
-                                       goto cont_copy_pte_range;
-
-                               /* If it's a COW mapping, write protect it both in the parent and the child */
-                               if (cow) {
-                                       /* XENO modification: modified ordering here to avoid RaW hazard. */
-                                       pte = *src_pte;
-                                       pte = pte_wrprotect(pte);
-                                       ptep_set_wrprotect(src_pte);
-                               }
-
-                               /* If it's a shared mapping, mark it clean in the child */
-                               if (vma->vm_flags & VM_SHARED)
-                                       pte = pte_mkclean(pte);
-                               pte = pte_mkold(pte);
-                               get_page(ptepage);
-                               dst->rss++;
-
-cont_copy_pte_range:           set_pte(dst_pte, pte);
-cont_copy_pte_range_noset:     address += PAGE_SIZE;
-                               if (address >= end)
-                                       goto out_unlock;
-                               src_pte++;
-                               dst_pte++;
-                       } while ((unsigned long)src_pte & PTE_TABLE_MASK);
-                       spin_unlock(&src->page_table_lock);
-               
-cont_copy_pmd_range:   src_pmd++;
-                       dst_pmd++;
-               } while ((unsigned long)src_pmd & PMD_TABLE_MASK);
-       }
-out_unlock:
-       spin_unlock(&src->page_table_lock);
-out:
-       return 0;
-nomem:
-       return -ENOMEM;
-}
-
-/*
- * Return indicates whether a page was freed so caller can adjust rss
- */
-static inline void forget_pte(pte_t page)
-{
-       if (!pte_none(page)) {
-               printk("forget_pte: old mapping existed!\n");
-               BUG();
-       }
-}
-
-static inline int zap_pte_range(mmu_gather_t *tlb, pmd_t * pmd, unsigned long address, unsigned long size)
-{
-       unsigned long offset;
-       pte_t * ptep;
-       int freed = 0;
-
-       if (pmd_none(*pmd))
-               return 0;
-       if (pmd_bad(*pmd)) {
-               pmd_ERROR(*pmd);
-               pmd_clear(pmd);
-               return 0;
-       }
-       ptep = pte_offset(pmd, address);
-       offset = address & ~PMD_MASK;
-       if (offset + size > PMD_SIZE)
-               size = PMD_SIZE - offset;
-       size &= PAGE_MASK;
-       for (offset=0; offset < size; ptep++, offset += PAGE_SIZE) {
-               pte_t pte = *ptep;
-               if (pte_none(pte))
-                       continue;
-               if (pte_present(pte)) {
-                       struct page *page = pte_page(pte);
-                       if (VALID_PAGE(page) && !PageReserved(page))
-                               freed ++;
-                       /* This will eventually call __free_pte on the pte. */
-                       tlb_remove_page(tlb, ptep, address + offset);
-               } else {
-                       free_swap_and_cache(pte_to_swp_entry(pte));
-                       pte_clear(ptep);
-               }
-       }
-
-       return freed;
-}
-
-static inline int zap_pmd_range(mmu_gather_t *tlb, pgd_t * dir, unsigned long address, unsigned long size)
-{
-       pmd_t * pmd;
-       unsigned long end;
-       int freed;
-
-       if (pgd_none(*dir))
-               return 0;
-       if (pgd_bad(*dir)) {
-               pgd_ERROR(*dir);
-               pgd_clear(dir);
-               return 0;
-       }
-       pmd = pmd_offset(dir, address);
-       end = address + size;
-       if (end > ((address + PGDIR_SIZE) & PGDIR_MASK))
-               end = ((address + PGDIR_SIZE) & PGDIR_MASK);
-       freed = 0;
-       do {
-               freed += zap_pte_range(tlb, pmd, address, end - address);
-               address = (address + PMD_SIZE) & PMD_MASK; 
-               pmd++;
-       } while (address < end);
-       return freed;
-}
-
-/*
- * remove user pages in a given range.
- */
-void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size)
-{
-       mmu_gather_t *tlb;
-       pgd_t * dir;
-       unsigned long start = address, end = address + size;
-       int freed = 0;
-
-       dir = pgd_offset(mm, address);
-
-       /*
-        * This is a long-lived spinlock. That's fine.
-        * There's no contention, because the page table
-        * lock only protects against kswapd anyway, and
-        * even if kswapd happened to be looking at this
-        * process we _want_ it to get stuck.
-        */
-       if (address >= end)
-               BUG();
-       spin_lock(&mm->page_table_lock);
-       flush_cache_range(mm, address, end);
-       tlb = tlb_gather_mmu(mm);
-
-       do {
-               freed += zap_pmd_range(tlb, dir, address, end - address);
-               address = (address + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (address && (address < end));
-
-       /* this will flush any remaining tlb entries */
-       tlb_finish_mmu(tlb, start, end);
-
-       /*
-        * Update rss for the mm_struct (not necessarily current->mm)
-        * Notice that rss is an unsigned long.
-        */
-       if (mm->rss > freed)
-               mm->rss -= freed;
-       else
-               mm->rss = 0;
-       spin_unlock(&mm->page_table_lock);
-}
-
-
-/*
- * Do a quick page-table lookup for a single page. 
- */
-static struct page * follow_page(unsigned long address, int write) 
-{
-       pgd_t *pgd;
-       pmd_t *pmd;
-       pte_t *ptep, pte;
-
-       pgd = pgd_offset(current->mm, address);
-       if (pgd_none(*pgd) || pgd_bad(*pgd))
-               goto out;
-
-       pmd = pmd_offset(pgd, address);
-       if (pmd_none(*pmd) || pmd_bad(*pmd))
-               goto out;
-
-       ptep = pte_offset(pmd, address);
-       if (!ptep)
-               goto out;
-
-       pte = *ptep;
-       if (pte_present(pte)) {
-               if (!write ||
-                   (pte_write(pte) && pte_dirty(pte)))
-                       return pte_page(pte);
-       }
-
-out:
-       return 0;
-}
-
-/* 
- * Given a physical address, is there a useful struct page pointing to
- * it?  This may become more complex in the future if we start dealing
- * with IO-aperture pages in kiobufs.
- */
-
-static inline struct page * get_page_map(struct page *page)
-{
-       if (!VALID_PAGE(page))
-               return 0;
-       return page;
-}
-
-/*
- * Force in an entire range of pages from the current process's user VA,
- * and pin them in physical memory.  
- */
-
-#define dprintk(x...)
-int map_user_kiobuf(int rw, struct kiobuf *iobuf, unsigned long va, size_t len)
-{
-       unsigned long           ptr, end;
-       int                     err;
-       struct mm_struct *      mm;
-       struct vm_area_struct * vma = 0;
-       struct page *           map;
-       int                     i;
-       int                     datain = (rw == READ);
-       
-       /* Make sure the iobuf is not already mapped somewhere. */
-       if (iobuf->nr_pages)
-               return -EINVAL;
-
-       mm = current->mm;
-       dprintk ("map_user_kiobuf: begin\n");
-       
-       ptr = va & PAGE_MASK;
-       end = (va + len + PAGE_SIZE - 1) & PAGE_MASK;
-       err = expand_kiobuf(iobuf, (end - ptr) >> PAGE_SHIFT);
-       if (err)
-               return err;
-
-       down_read(&mm->mmap_sem);
-
-       err = -EFAULT;
-       iobuf->locked = 0;
-       iobuf->offset = va & ~PAGE_MASK;
-       iobuf->length = len;
-       
-       i = 0;
-       
-       /* 
-        * First of all, try to fault in all of the necessary pages
-        */
-       while (ptr < end) {
-               if (!vma || ptr >= vma->vm_end) {
-                       vma = find_vma(current->mm, ptr);
-                       if (!vma) 
-                               goto out_unlock;
-                       if (vma->vm_start > ptr) {
-                               if (!(vma->vm_flags & VM_GROWSDOWN))
-                                       goto out_unlock;
-                               if (expand_stack(vma, ptr))
-                                       goto out_unlock;
-                       }
-                       if (((datain) && (!(vma->vm_flags & VM_WRITE))) ||
-                                       (!(vma->vm_flags & VM_READ))) {
-                               err = -EACCES;
-                               goto out_unlock;
-                       }
-               }
-               spin_lock(&mm->page_table_lock);
-               while (!(map = follow_page(ptr, datain))) {
-                       int ret;
-
-                       spin_unlock(&mm->page_table_lock);
-                       ret = handle_mm_fault(current->mm, vma, ptr, datain);
-                       if (ret <= 0) {
-                               if (!ret)
-                                       goto out_unlock;
-                               else {
-                                       err = -ENOMEM;
-                                       goto out_unlock;
-                               }
-                       }
-                       spin_lock(&mm->page_table_lock);
-               }                       
-               map = get_page_map(map);
-               if (map) {
-                       flush_dcache_page(map);
-                       page_cache_get(map);
-               } else
-                       printk (KERN_INFO "Mapped page missing [%d]\n", i);
-               spin_unlock(&mm->page_table_lock);
-               iobuf->maplist[i] = map;
-               iobuf->nr_pages = ++i;
-               
-               ptr += PAGE_SIZE;
-       }
-
-       up_read(&mm->mmap_sem);
-       dprintk ("map_user_kiobuf: end OK\n");
-       return 0;
-
- out_unlock:
-       up_read(&mm->mmap_sem);
-       unmap_kiobuf(iobuf);
-       dprintk ("map_user_kiobuf: end %d\n", err);
-       return err;
-}
-
-/*
- * Mark all of the pages in a kiobuf as dirty 
- *
- * We need to be able to deal with short reads from disk: if an IO error
- * occurs, the number of bytes read into memory may be less than the
- * size of the kiobuf, so we have to stop marking pages dirty once the
- * requested byte count has been reached.
- */
-
-void mark_dirty_kiobuf(struct kiobuf *iobuf, int bytes)
-{
-       int index, offset, remaining;
-       struct page *page;
-       
-       index = iobuf->offset >> PAGE_SHIFT;
-       offset = iobuf->offset & ~PAGE_MASK;
-       remaining = bytes;
-       if (remaining > iobuf->length)
-               remaining = iobuf->length;
-       
-       while (remaining > 0 && index < iobuf->nr_pages) {
-               page = iobuf->maplist[index];
-               
-               if (!PageReserved(page))
-                       SetPageDirty(page);
-
-               remaining -= (PAGE_SIZE - offset);
-               offset = 0;
-               index++;
-       }
-}
-
-/*
- * Unmap all of the pages referenced by a kiobuf.  We release the pages,
- * and unlock them if they were locked. 
- */
-
-void unmap_kiobuf (struct kiobuf *iobuf) 
-{
-       int i;
-       struct page *map;
-       
-       for (i = 0; i < iobuf->nr_pages; i++) {
-               map = iobuf->maplist[i];
-               if (map) {
-                       if (iobuf->locked)
-                               UnlockPage(map);
-                       page_cache_release(map);
-               }
-       }
-       
-       iobuf->nr_pages = 0;
-       iobuf->locked = 0;
-}
-
-
-/*
- * Lock down all of the pages of a kiovec for IO.
- *
- * If any page is mapped twice in the kiovec, we return the error -EINVAL.
- *
- * The optional wait parameter causes the lock call to block until all
- * pages can be locked if set.  If wait==0, the lock operation is
- * aborted if any locked pages are found and -EAGAIN is returned.
- */
-
-int lock_kiovec(int nr, struct kiobuf *iovec[], int wait)
-{
-       struct kiobuf *iobuf;
-       int i, j;
-       struct page *page, **ppage;
-       int doublepage = 0;
-       int repeat = 0;
-       
- repeat:
-       
-       for (i = 0; i < nr; i++) {
-               iobuf = iovec[i];
-
-               if (iobuf->locked)
-                       continue;
-
-               ppage = iobuf->maplist;
-               for (j = 0; j < iobuf->nr_pages; ppage++, j++) {
-                       page = *ppage;
-                       if (!page)
-                               continue;
-                       
-                       if (TryLockPage(page)) {
-                               while (j--) {
-                                       struct page *tmp = *--ppage;
-                                       if (tmp)
-                                               UnlockPage(tmp);
-                               }
-                               goto retry;
-                       }
-               }
-               iobuf->locked = 1;
-       }
-
-       return 0;
-       
- retry:
-       
-       /* 
-        * We couldn't lock one of the pages.  Undo the locking so far,
-        * wait on the page we got to, and try again.  
-        */
-       
-       unlock_kiovec(nr, iovec);
-       if (!wait)
-               return -EAGAIN;
-       
-       /* 
-        * Did the release also unlock the page we got stuck on?
-        */
-       if (!PageLocked(page)) {
-               /* 
-                * If so, we may well have the page mapped twice
-                * in the IO address range.  Bad news.  Of
-                * course, it _might_ just be a coincidence,
-                * but if it happens more than once, chances
-                * are we have a double-mapped page. 
-                */
-               if (++doublepage >= 3) 
-                       return -EINVAL;
-               
-               /* Try again...  */
-               wait_on_page(page);
-       }
-       
-       if (++repeat < 16)
-               goto repeat;
-       return -EAGAIN;
-}
-
-/*
- * Unlock all of the pages of a kiovec after IO.
- */
-
-int unlock_kiovec(int nr, struct kiobuf *iovec[])
-{
-       struct kiobuf *iobuf;
-       int i, j;
-       struct page *page, **ppage;
-       
-       for (i = 0; i < nr; i++) {
-               iobuf = iovec[i];
-
-               if (!iobuf->locked)
-                       continue;
-               iobuf->locked = 0;
-               
-               ppage = iobuf->maplist;
-               for (j = 0; j < iobuf->nr_pages; ppage++, j++) {
-                       page = *ppage;
-                       if (!page)
-                               continue;
-                       UnlockPage(page);
-               }
-       }
-       return 0;
-}
-
-static inline void zeromap_pte_range(pte_t * pte, unsigned long address,
-                                     unsigned long size, pgprot_t prot)
-{
-       unsigned long end;
-
-       address &= ~PMD_MASK;
-       end = address + size;
-       if (end > PMD_SIZE)
-               end = PMD_SIZE;
-       do {
-               pte_t zero_pte = pte_wrprotect(mk_pte(ZERO_PAGE(address), prot));
-               pte_t oldpage = ptep_get_and_clear(pte);
-               set_pte(pte, zero_pte);
-               forget_pte(oldpage);
-               address += PAGE_SIZE;
-               pte++;
-       } while (address && (address < end));
-}
-
-static inline int zeromap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address,
-                                    unsigned long size, pgprot_t prot)
-{
-       unsigned long end;
-
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-               end = PGDIR_SIZE;
-       do {
-               pte_t * pte = pte_alloc(mm, pmd, address);
-               if (!pte)
-                       return -ENOMEM;
-               zeromap_pte_range(pte, address, end - address, prot);
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-       return 0;
-}
-
-int zeromap_page_range(unsigned long address, unsigned long size, pgprot_t prot)
-{
-       int error = 0;
-       pgd_t * dir;
-       unsigned long beg = address;
-       unsigned long end = address + size;
-       struct mm_struct *mm = current->mm;
-
-       dir = pgd_offset(mm, address);
-       flush_cache_range(mm, beg, end);
-       if (address >= end)
-               BUG();
-
-       spin_lock(&mm->page_table_lock);
-       do {
-               pmd_t *pmd = pmd_alloc(mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
-               error = zeromap_pmd_range(mm, pmd, address, end - address, prot);
-               if (error)
-                       break;
-               address = (address + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (address && (address < end));
-       spin_unlock(&mm->page_table_lock);
-       flush_tlb_range(mm, beg, end);
-       return error;
-}
-
-/*
- * maps a range of physical memory into the requested pages. the old
- * mappings are removed. any references to nonexistent pages results
- * in null mappings (currently treated as "copy-on-access")
- */
-static inline void remap_pte_range(pte_t * pte, unsigned long address, unsigned long size,
-       unsigned long phys_addr, pgprot_t prot)
-{
-       unsigned long end;
-
-       address &= ~PMD_MASK;
-       end = address + size;
-       if (end > PMD_SIZE)
-               end = PMD_SIZE;
-       do {
-               struct page *page;
-               pte_t oldpage;
-               oldpage = ptep_get_and_clear(pte);
-
-               page = virt_to_page(__va(phys_addr));
-               if ((!VALID_PAGE(page)) || PageReserved(page))
-                       set_pte(pte, mk_pte_phys(phys_addr, prot));
-               forget_pte(oldpage);
-               address += PAGE_SIZE;
-               phys_addr += PAGE_SIZE;
-               pte++;
-       } while (address && (address < end));
-}
-
-static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
-       unsigned long phys_addr, pgprot_t prot)
-{
-       unsigned long end;
-
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-               end = PGDIR_SIZE;
-       phys_addr -= address;
-       do {
-               pte_t * pte = pte_alloc(mm, pmd, address);
-               if (!pte)
-                       return -ENOMEM;
-               remap_pte_range(pte, address, end - address, address + phys_addr, prot);
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-       return 0;
-}
-
-/*  Note: this is only safe if the mm semaphore is held when called. */
-int remap_page_range(unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot)
-{
-       int error = 0;
-       pgd_t * dir;
-       unsigned long beg = from;
-       unsigned long end = from + size;
-       struct mm_struct *mm = current->mm;
-
-       phys_addr -= from;
-       dir = pgd_offset(mm, from);
-       flush_cache_range(mm, beg, end);
-       if (from >= end)
-               BUG();
-
-       spin_lock(&mm->page_table_lock);
-       do {
-               pmd_t *pmd = pmd_alloc(mm, dir, from);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
-               error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
-               if (error)
-                       break;
-               from = (from + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (from && (from < end));
-       spin_unlock(&mm->page_table_lock);
-       flush_tlb_range(mm, beg, end);
-       return error;
-}
-
-/*
- * Establish a new mapping:
- *  - flush the old one
- *  - update the page tables
- *  - inform the TLB about the new one
- *
- * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock
- */
-static inline void establish_pte(struct vm_area_struct * vma, unsigned long address, pte_t *page_table, pte_t entry)
-{
-       set_pte(page_table, entry);
-       flush_tlb_page(vma, address);
-       update_mmu_cache(vma, address, entry);
-}
-
-/*
- * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock
- */
-static inline void break_cow(struct vm_area_struct * vma, struct page * new_page, unsigned long address, 
-               pte_t *page_table)
-{
-       flush_page_to_ram(new_page);
-       flush_cache_page(vma, address);
-       establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot))));
-}
-
-/*
- * This routine handles present pages, when users try to write
- * to a shared page. It is done by copying the page to a new address
- * and decrementing the shared-page counter for the old page.
- *
- * Goto-purists beware: the only reason for goto's here is that it results
- * in better assembly code.. The "default" path will see no jumps at all.
- *
- * Note that this routine assumes that the protection checks have been
- * done by the caller (the low-level page fault routine in most cases).
- * Thus we can safely just mark it writable once we've done any necessary
- * COW.
- *
- * We also mark the page dirty at this point even though the page will
- * change only once the write actually happens. This avoids a few races,
- * and potentially makes it more efficient.
- *
- * We hold the mm semaphore and the page_table_lock on entry and exit
- * with the page_table_lock released.
- */
-static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma,
-       unsigned long address, pte_t *page_table, pte_t pte)
-{
-       struct page *old_page, *new_page;
-
-       old_page = pte_page(pte);
-       if (!VALID_PAGE(old_page))
-               goto bad_wp_page;
-
-       if (!TryLockPage(old_page)) {
-               int reuse = can_share_swap_page(old_page);
-               unlock_page(old_page);
-               if (reuse) {
-                       flush_cache_page(vma, address);
-                       establish_pte(vma, address, page_table, pte_mkyoung(pte_mkdirty(pte_mkwrite(pte))));
-                       spin_unlock(&mm->page_table_lock);
-                       return 1;       /* Minor fault */
-               }
-       }
-
-       /*
-        * Ok, we need to copy. Oh, well..
-        */
-       page_cache_get(old_page);
-       spin_unlock(&mm->page_table_lock);
-
-       new_page = alloc_page(GFP_HIGHUSER);
-       if (!new_page)
-               goto no_mem;
-       copy_cow_page(old_page,new_page,address);
-
-       /*
-        * Re-check the pte - we dropped the lock
-        */
-       spin_lock(&mm->page_table_lock);
-       if (pte_same(*page_table, pte)) {
-               if (PageReserved(old_page))
-                       ++mm->rss;
-               break_cow(vma, new_page, address, page_table);
-               lru_cache_add(new_page);
-
-               /* Free the old page.. */
-               new_page = old_page;
-       }
-       spin_unlock(&mm->page_table_lock);
-       page_cache_release(new_page);
-       page_cache_release(old_page);
-       return 1;       /* Minor fault */
-
-bad_wp_page:
-       spin_unlock(&mm->page_table_lock);
-       printk("do_wp_page: bogus page at address %08lx (page 0x%lx)\n",address,(unsigned long)old_page);
-       return -1;
-no_mem:
-       page_cache_release(old_page);
-       return -1;
-}
-
-static void vmtruncate_list(struct vm_area_struct *mpnt, unsigned long pgoff)
-{
-       do {
-               struct mm_struct *mm = mpnt->vm_mm;
-               unsigned long start = mpnt->vm_start;
-               unsigned long end = mpnt->vm_end;
-               unsigned long len = end - start;
-               unsigned long diff;
-
-               /* mapping wholly truncated? */
-               if (mpnt->vm_pgoff >= pgoff) {
-                       zap_page_range(mm, start, len);
-                       continue;
-               }
-
-               /* mapping wholly unaffected? */
-               len = len >> PAGE_SHIFT;
-               diff = pgoff - mpnt->vm_pgoff;
-               if (diff >= len)
-                       continue;
-
-               /* Ok, partially affected.. */
-               start += diff << PAGE_SHIFT;
-               len = (len - diff) << PAGE_SHIFT;
-               zap_page_range(mm, start, len);
-       } while ((mpnt = mpnt->vm_next_share) != NULL);
-}
-
-/*
- * Handle all mappings that got truncated by a "truncate()"
- * system call.
- *
- * NOTE! We have to be ready to update the memory sharing
- * between the file and the memory map for a potential last
- * incomplete page.  Ugly, but necessary.
- */
-int vmtruncate(struct inode * inode, loff_t offset)
-{
-       unsigned long pgoff;
-       struct address_space *mapping = inode->i_mapping;
-       unsigned long limit;
-
-       if (inode->i_size < offset)
-               goto do_expand;
-       inode->i_size = offset;
-       spin_lock(&mapping->i_shared_lock);
-       if (!mapping->i_mmap && !mapping->i_mmap_shared)
-               goto out_unlock;
-
-       pgoff = (offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
-       if (mapping->i_mmap != NULL)
-               vmtruncate_list(mapping->i_mmap, pgoff);
-       if (mapping->i_mmap_shared != NULL)
-               vmtruncate_list(mapping->i_mmap_shared, pgoff);
-
-out_unlock:
-       spin_unlock(&mapping->i_shared_lock);
-       truncate_inode_pages(mapping, offset);
-       goto out_truncate;
-
-do_expand:
-       limit = current->rlim[RLIMIT_FSIZE].rlim_cur;
-       if (limit != RLIM_INFINITY) {
-               if (inode->i_size >= limit) {
-                       send_sig(SIGXFSZ, current, 0);
-                       goto out;
-               }
-               if (offset > limit) {
-                       send_sig(SIGXFSZ, current, 0);
-                       offset = limit;
-               }
-       }
-       inode->i_size = offset;
-
-out_truncate:
-       if (inode->i_op && inode->i_op->truncate) {
-               lock_kernel();
-               inode->i_op->truncate(inode);
-               unlock_kernel();
-       }
-out:
-       return 0;
-}
-
-/* 
- * Primitive swap readahead code. We simply read an aligned block of
- * (1 << page_cluster) entries in the swap area. This method is chosen
- * because it doesn't cost us any seek time.  We also make sure to queue
- * the 'original' request together with the readahead ones...  
- */
-void swapin_readahead(swp_entry_t entry)
-{
-       int i, num;
-       struct page *new_page;
-       unsigned long offset;
-
-       /*
-        * Get the number of handles we should do readahead io to.
-        */
-       num = valid_swaphandles(entry, &offset);
-       for (i = 0; i < num; offset++, i++) {
-               /* Ok, do the async read-ahead now */
-               new_page = read_swap_cache_async(SWP_ENTRY(SWP_TYPE(entry), offset));
-               if (!new_page)
-                       break;
-               page_cache_release(new_page);
-       }
-       return;
-}
-
-/*
- * We hold the mm semaphore and the page_table_lock on entry and
- * should release the pagetable lock on exit..
- */
-static int do_swap_page(struct mm_struct * mm,
-       struct vm_area_struct * vma, unsigned long address,
-       pte_t * page_table, pte_t orig_pte, int write_access)
-{
-       struct page *page;
-       swp_entry_t entry = pte_to_swp_entry(orig_pte);
-       pte_t pte;
-       int ret = 1;
-
-       spin_unlock(&mm->page_table_lock);
-       page = lookup_swap_cache(entry);
-       if (!page) {
-               swapin_readahead(entry);
-               page = read_swap_cache_async(entry);
-               if (!page) {
-                       /*
-                        * Back out if somebody else faulted in this pte while
-                        * we released the page table lock.
-                        */
-                       int retval;
-                       spin_lock(&mm->page_table_lock);
-                       retval = pte_same(*page_table, orig_pte) ? -1 : 1;
-                       spin_unlock(&mm->page_table_lock);
-                       return retval;
-               }
-
-               /* Had to read the page from swap area: Major fault */
-               ret = 2;
-       }
-
-       lock_page(page);
-
-       /*
-        * Back out if somebody else faulted in this pte while we
-        * released the page table lock.
-        */
-       spin_lock(&mm->page_table_lock);
-       if (!pte_same(*page_table, orig_pte)) {
-               spin_unlock(&mm->page_table_lock);
-               unlock_page(page);
-               page_cache_release(page);
-               return 1;
-       }
-
-       /* The page isn't present yet, go ahead with the fault. */
-               
-       swap_free(entry);
-       if (vm_swap_full())
-               remove_exclusive_swap_page(page);
-
-       mm->rss++;
-       pte = mk_pte(page, vma->vm_page_prot);
-       if (write_access && can_share_swap_page(page))
-               pte = pte_mkdirty(pte_mkwrite(pte));
-       unlock_page(page);
-
-       flush_page_to_ram(page);
-       flush_icache_page(vma, page);
-       set_pte(page_table, pte);
-
-       /* No need to invalidate - it was non-present before */
-       update_mmu_cache(vma, address, pte);
-       XENO_flush_page_update_queue();
-       spin_unlock(&mm->page_table_lock);
-       return ret;
-}
-
-/*
- * We are called with the MM semaphore and page_table_lock
- * spinlock held to protect against concurrent faults in
- * multithreaded programs. 
- */
-static int do_anonymous_page(struct mm_struct * mm, struct vm_area_struct * vma, pte_t *page_table, int write_access, unsigned long addr)
-{
-       pte_t entry;
-
-       /* Read-only mapping of ZERO_PAGE. */
-       entry = pte_wrprotect(mk_pte(ZERO_PAGE(addr), vma->vm_page_prot));
-
-       /* ..except if it's a write access */
-       if (write_access) {
-               struct page *page;
-
-               /* Allocate our own private page. */
-               spin_unlock(&mm->page_table_lock);
-
-               page = alloc_page(GFP_HIGHUSER);
-               if (!page)
-                       goto no_mem;
-               clear_user_highpage(page, addr);
-
-               spin_lock(&mm->page_table_lock);
-               if (!pte_none(*page_table)) {
-                       page_cache_release(page);
-                       spin_unlock(&mm->page_table_lock);
-                       return 1;
-               }
-               mm->rss++;
-               flush_page_to_ram(page);
-               entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
-               lru_cache_add(page);
-       }
-
-       set_pte(page_table, entry);
-
-       /* No need to invalidate - it was non-present before */
-       update_mmu_cache(vma, addr, entry);
-       XENO_flush_page_update_queue();
-       spin_unlock(&mm->page_table_lock);
-       return 1;       /* Minor fault */
-
-no_mem:
-       return -1;
-}
-
-/*
- * do_no_page() tries to create a new page mapping. It aggressively
- * tries to share with existing pages, but makes a separate copy if
- * the "write_access" parameter is true in order to avoid the next
- * page fault.
- *
- * As this is called only for pages that do not currently exist, we
- * do not need to flush old virtual caches or the TLB.
- *
- * This is called with the MM semaphore held and the page table
- * spinlock held. Exit with the spinlock released.
- */
-static int do_no_page(struct mm_struct * mm, struct vm_area_struct * vma,
-       unsigned long address, int write_access, pte_t *page_table)
-{
-       struct page * new_page;
-       pte_t entry;
-
-       if (!vma->vm_ops || !vma->vm_ops->nopage)
-               return do_anonymous_page(mm, vma, page_table, write_access, address);
-       spin_unlock(&mm->page_table_lock);
-
-       new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, 0);
-
-       if (new_page == NULL)   /* no page was available -- SIGBUS */
-               return 0;
-       if (new_page == NOPAGE_OOM)
-               return -1;
-
-       /*
-        * Should we do an early C-O-W break?
-        */
-       if (write_access && !(vma->vm_flags & VM_SHARED)) {
-               struct page * page = alloc_page(GFP_HIGHUSER);
-               if (!page)
-                       return -1;
-               copy_highpage(page, new_page);
-               page_cache_release(new_page);
-               lru_cache_add(page);
-               new_page = page;
-       }
-
-       spin_lock(&mm->page_table_lock);
-       /*
-        * This silly early PAGE_DIRTY setting removes a race
-        * due to the bad i386 page protection. But it's valid
-        * for other architectures too.
-        *
-        * Note that if write_access is true, we either now have
-        * an exclusive copy of the page, or this is a shared mapping,
-        * so we can make it writable and dirty to avoid having to
-        * handle that later.
-        */
-       /* Only go through if we didn't race with anybody else... */
-       if (pte_none(*page_table)) {
-               ++mm->rss;
-               flush_page_to_ram(new_page);
-               flush_icache_page(vma, new_page);
-               entry = mk_pte(new_page, vma->vm_page_prot);
-               if (write_access)
-                       entry = pte_mkwrite(pte_mkdirty(entry));
-               set_pte(page_table, entry);
-       } else {
-               /* One of our sibling threads was faster, back out. */
-               page_cache_release(new_page);
-               spin_unlock(&mm->page_table_lock);
-               return 1;
-       }
-
-       /* no need to invalidate: a not-present page shouldn't be cached */
-       update_mmu_cache(vma, address, entry);
-       XENO_flush_page_update_queue();
-        spin_unlock(&mm->page_table_lock);
-       return 2;       /* Major fault */
-}
-
-/*
- * These routines also need to handle stuff like marking pages dirty
- * and/or accessed for architectures that don't do it in hardware (most
- * RISC architectures).  The early dirtying is also good on the i386.
- *
- * There is also a hook called "update_mmu_cache()" that architectures
- * with external mmu caches can use to update those (ie the Sparc or
- * PowerPC hashed page tables that act as extended TLBs).
- *
- * Note the "page_table_lock". It is to protect against kswapd removing
- * pages from under us. Note that kswapd only ever _removes_ pages, never
- * adds them. As such, once we have noticed that the page is not present,
- * we can drop the lock early.
- *
- * The adding of pages is protected by the MM semaphore (which we hold),
- * so we don't need to worry about a page being suddenly been added into
- * our VM.
- *
- * We enter with the pagetable spinlock held, we are supposed to
- * release it when done.
- */
-static inline int handle_pte_fault(struct mm_struct *mm,
-       struct vm_area_struct * vma, unsigned long address,
-       int write_access, pte_t * pte)
-{
-       pte_t entry;
-
-       entry = *pte;
-       if (!pte_present(entry)) {
-               /*
-                * If it truly wasn't present, we know that kswapd
-                * and the PTE updates will not touch it later. So
-                * drop the lock.
-                */
-               if (pte_none(entry))
-                       return do_no_page(mm, vma, address, write_access, pte);
-               return do_swap_page(mm, vma, address, pte, entry, write_access);
-       }
-
-       if (write_access) {
-               if (!pte_write(entry))
-                       return do_wp_page(mm, vma, address, pte, entry);
-
-               entry = pte_mkdirty(entry);
-       }
-       entry = pte_mkyoung(entry);
-       establish_pte(vma, address, pte, entry);
-       XENO_flush_page_update_queue();
-       spin_unlock(&mm->page_table_lock);
-       return 1;
-}
-
-/*
- * By the time we get here, we already hold the mm semaphore
- */
-int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma,
-       unsigned long address, int write_access)
-{
-       pgd_t *pgd;
-       pmd_t *pmd;
-
-       current->state = TASK_RUNNING;
-       pgd = pgd_offset(mm, address);
-
-       /*
-        * We need the page table lock to synchronize with kswapd
-        * and the SMP-safe atomic PTE updates.
-        */
-       spin_lock(&mm->page_table_lock);
-       pmd = pmd_alloc(mm, pgd, address);
-
-       if (pmd) {
-               pte_t * pte = pte_alloc(mm, pmd, address);
-               if (pte)
-                       return handle_pte_fault(mm, vma, address, write_access, pte);
-       }
-       spin_unlock(&mm->page_table_lock);
-       return -1;
-}
-
-/*
- * Allocate page middle directory.
- *
- * We've already handled the fast-path in-line, and we own the
- * page table lock.
- *
- * On a two-level page table, this ends up actually being entirely
- * optimized away.
- */
-pmd_t *__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
-{
-       pmd_t *new;
-
-       /* "fast" allocation can happen without dropping the lock.. */
-       new = pmd_alloc_one_fast(mm, address);
-       if (!new) {
-               spin_unlock(&mm->page_table_lock);
-               new = pmd_alloc_one(mm, address);
-               spin_lock(&mm->page_table_lock);
-               if (!new)
-                       return NULL;
-
-               /*
-                * Because we dropped the lock, we should re-check the
-                * entry, as somebody else could have populated it..
-                */
-               if (!pgd_none(*pgd)) {
-                       pmd_free(new);
-                       goto out;
-               }
-       }
-       pgd_populate(mm, pgd, new);
-out:
-       return pmd_offset(pgd, address);
-}
-
-/*
- * Allocate the page table directory.
- *
- * We've already handled the fast-path in-line, and we own the
- * page table lock.
- */
-pte_t *pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-{
-       if (pmd_none(*pmd)) {
-               pte_t *new;
-
-               /* "fast" allocation can happen without dropping the lock.. */
-               new = pte_alloc_one_fast(mm, address);
-               if (!new) {
-                       XENO_flush_page_update_queue();
-                       spin_unlock(&mm->page_table_lock);
-                       new = pte_alloc_one(mm, address);
-                       spin_lock(&mm->page_table_lock);
-                       if (!new)
-                               return NULL;
-
-                       /*
-                        * Because we dropped the lock, we should re-check the
-                        * entry, as somebody else could have populated it..
-                        */
-                       if (!pmd_none(*pmd)) {
-                               pte_free(new);
-                               goto out;
-                       }
-               }
-               pmd_populate(mm, pmd, new);
-       }
-out:
-       return pte_offset(pmd, address);
-}
-
-/*
- * Simplistic page force-in..
- */
-int make_pages_present(unsigned long addr, unsigned long end)
-{
-       int write;
-       struct mm_struct *mm = current->mm;
-       struct vm_area_struct * vma;
-
-       vma = find_vma(mm, addr);
-       write = (vma->vm_flags & VM_WRITE) != 0;
-       if (addr >= end)
-               BUG();
-       do {
-               if (handle_mm_fault(mm, vma, addr, write) < 0)
-                       return -1;
-               addr += PAGE_SIZE;
-       } while (addr < end);
-       return 0;
-}
diff --git a/old/xenolinux-2.4.16-sparse/mm/mremap.c b/old/xenolinux-2.4.16-sparse/mm/mremap.c
deleted file mode 100644 (file)
index a2e0d86..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- *     linux/mm/remap.c
- *
- *     (C) Copyright 1996 Linus Torvalds
- */
-
-#include <linux/slab.h>
-#include <linux/smp_lock.h>
-#include <linux/shm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-
-extern int vm_enough_memory(long pages);
-
-static inline pte_t *get_one_pte(struct mm_struct *mm, unsigned long addr)
-{
-       pgd_t * pgd;
-       pmd_t * pmd;
-       pte_t * pte = NULL;
-
-       pgd = pgd_offset(mm, addr);
-       if (pgd_none(*pgd))
-               goto end;
-       if (pgd_bad(*pgd)) {
-               pgd_ERROR(*pgd);
-               pgd_clear(pgd);
-               goto end;
-       }
-
-       pmd = pmd_offset(pgd, addr);
-       if (pmd_none(*pmd))
-               goto end;
-       if (pmd_bad(*pmd)) {
-               pmd_ERROR(*pmd);
-               pmd_clear(pmd);
-               goto end;
-       }
-
-       pte = pte_offset(pmd, addr);
-       if (pte_none(*pte))
-               pte = NULL;
-end:
-       return pte;
-}
-
-static inline pte_t *alloc_one_pte(struct mm_struct *mm, unsigned long addr)
-{
-       pmd_t * pmd;
-       pte_t * pte = NULL;
-
-       pmd = pmd_alloc(mm, pgd_offset(mm, addr), addr);
-       if (pmd)
-               pte = pte_alloc(mm, pmd, addr);
-       return pte;
-}
-
-static inline int copy_one_pte(struct mm_struct *mm, pte_t * src, pte_t * dst)
-{
-       int error = 0;
-       pte_t pte;
-
-       if (!pte_none(*src)) {
-               pte = ptep_get_and_clear(src);
-               if (!dst) {
-                       /* No dest?  We must put it back. */
-                       dst = src;
-                       error++;
-               }
-               set_pte(dst, pte);
-       }
-       return error;
-}
-
-static int move_one_page(struct mm_struct *mm, unsigned long old_addr, unsigned long new_addr)
-{
-       int error = 0;
-       pte_t * src;
-
-       spin_lock(&mm->page_table_lock);
-       src = get_one_pte(mm, old_addr);
-       if (src)
-               error = copy_one_pte(mm, src, alloc_one_pte(mm, new_addr));
-       spin_unlock(&mm->page_table_lock);
-       return error;
-}
-
-static int move_page_tables(struct mm_struct * mm,
-       unsigned long new_addr, unsigned long old_addr, unsigned long len)
-{
-       unsigned long offset = len;
-
-       flush_cache_range(mm, old_addr, old_addr + len);
-
-       /*
-        * This is not the clever way to do this, but we're taking the
-        * easy way out on the assumption that most remappings will be
-        * only a few pages.. This also makes error recovery easier.
-        */
-       while (offset) {
-               offset -= PAGE_SIZE;
-               if (move_one_page(mm, old_addr + offset, new_addr + offset))
-                       goto oops_we_failed;
-       }
-       flush_tlb_range(mm, old_addr, old_addr + len);
-       return 0;
-
-       /*
-        * Ok, the move failed because we didn't have enough pages for
-        * the new page table tree. This is unlikely, but we have to
-        * take the possibility into account. In that case we just move
-        * all the pages back (this will work, because we still have
-        * the old page tables)
-        */
-oops_we_failed:
-       XENO_flush_page_update_queue();
-       flush_cache_range(mm, new_addr, new_addr + len);
-       while ((offset += PAGE_SIZE) < len)
-               move_one_page(mm, new_addr + offset, old_addr + offset);
-       XENO_flush_page_update_queue();
-       zap_page_range(mm, new_addr, len);
-       return -1;
-}
-
-static inline unsigned long move_vma(struct vm_area_struct * vma,
-       unsigned long addr, unsigned long old_len, unsigned long new_len,
-       unsigned long new_addr)
-{
-       struct mm_struct * mm = vma->vm_mm;
-       struct vm_area_struct * new_vma, * next, * prev;
-       int allocated_vma;
-
-       new_vma = NULL;
-       next = find_vma_prev(mm, new_addr, &prev);
-       if (next) {
-               if (prev && prev->vm_end == new_addr &&
-                   can_vma_merge(prev, vma->vm_flags) && !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
-                       spin_lock(&mm->page_table_lock);
-                       prev->vm_end = new_addr + new_len;
-                       spin_unlock(&mm->page_table_lock);
-                       new_vma = prev;
-                       if (next != prev->vm_next)
-                               BUG();
-                       if (prev->vm_end == next->vm_start && can_vma_merge(next, prev->vm_flags)) {
-                               spin_lock(&mm->page_table_lock);
-                               prev->vm_end = next->vm_end;
-                               __vma_unlink(mm, next, prev);
-                               spin_unlock(&mm->page_table_lock);
-
-                               mm->map_count--;
-                               kmem_cache_free(vm_area_cachep, next);
-                       }
-               } else if (next->vm_start == new_addr + new_len &&
-                          can_vma_merge(next, vma->vm_flags) && !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
-                       spin_lock(&mm->page_table_lock);
-                       next->vm_start = new_addr;
-                       spin_unlock(&mm->page_table_lock);
-                       new_vma = next;
-               }
-       } else {
-               prev = find_vma(mm, new_addr-1);
-               if (prev && prev->vm_end == new_addr &&
-                   can_vma_merge(prev, vma->vm_flags) && !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
-                       spin_lock(&mm->page_table_lock);
-                       prev->vm_end = new_addr + new_len;
-                       spin_unlock(&mm->page_table_lock);
-                       new_vma = prev;
-               }
-       }
-
-       allocated_vma = 0;
-       if (!new_vma) {
-               new_vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
-               if (!new_vma)
-                       goto out;
-               allocated_vma = 1;
-       }
-
-       if (!move_page_tables(current->mm, new_addr, addr, old_len)) {
-               if (allocated_vma) {
-                       *new_vma = *vma;
-                       new_vma->vm_start = new_addr;
-                       new_vma->vm_end = new_addr+new_len;
-                       new_vma->vm_pgoff += (addr - vma->vm_start) >> PAGE_SHIFT;
-                       new_vma->vm_raend = 0;
-                       if (new_vma->vm_file)
-                               get_file(new_vma->vm_file);
-                       if (new_vma->vm_ops && new_vma->vm_ops->open)
-                               new_vma->vm_ops->open(new_vma);
-                       insert_vm_struct(current->mm, new_vma);
-               }
-               do_munmap(current->mm, addr, old_len);
-               current->mm->total_vm += new_len >> PAGE_SHIFT;
-               if (new_vma->vm_flags & VM_LOCKED) {
-                       current->mm->locked_vm += new_len >> PAGE_SHIFT;
-                       make_pages_present(new_vma->vm_start,
-                                          new_vma->vm_end);
-               }
-               return new_addr;
-       }
-       if (allocated_vma)
-               kmem_cache_free(vm_area_cachep, new_vma);
- out:
-       return -ENOMEM;
-}
-
-/*
- * Expand (or shrink) an existing mapping, potentially moving it at the
- * same time (controlled by the MREMAP_MAYMOVE flag and available VM space)
- *
- * MREMAP_FIXED option added 5-Dec-1999 by Benjamin LaHaise
- * This option implies MREMAP_MAYMOVE.
- */
-unsigned long do_mremap(unsigned long addr,
-       unsigned long old_len, unsigned long new_len,
-       unsigned long flags, unsigned long new_addr)
-{
-       struct vm_area_struct *vma;
-       unsigned long ret = -EINVAL;
-
-       if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
-               goto out;
-
-       if (addr & ~PAGE_MASK)
-               goto out;
-
-       old_len = PAGE_ALIGN(old_len);
-       new_len = PAGE_ALIGN(new_len);
-
-       /* new_addr is only valid if MREMAP_FIXED is specified */
-       if (flags & MREMAP_FIXED) {
-               if (new_addr & ~PAGE_MASK)
-                       goto out;
-               if (!(flags & MREMAP_MAYMOVE))
-                       goto out;
-
-               if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len)
-                       goto out;
-
-               /* Check if the location we're moving into overlaps the
-                * old location at all, and fail if it does.
-                */
-               if ((new_addr <= addr) && (new_addr+new_len) > addr)
-                       goto out;
-
-               if ((addr <= new_addr) && (addr+old_len) > new_addr)
-                       goto out;
-
-               do_munmap(current->mm, new_addr, new_len);
-       }
-
-       /*
-        * Always allow a shrinking remap: that just unmaps
-        * the unnecessary pages..
-        */
-       ret = addr;
-       if (old_len >= new_len) {
-               do_munmap(current->mm, addr+new_len, old_len - new_len);
-               if (!(flags & MREMAP_FIXED) || (new_addr == addr))
-                       goto out;
-       }
-
-       /*
-        * Ok, we need to grow..  or relocate.
-        */
-       ret = -EFAULT;
-       vma = find_vma(current->mm, addr);
-       if (!vma || vma->vm_start > addr)
-               goto out;
-       /* We can't remap across vm area boundaries */
-       if (old_len > vma->vm_end - addr)
-               goto out;
-       if (vma->vm_flags & VM_DONTEXPAND) {
-               if (new_len > old_len)
-                       goto out;
-       }
-       if (vma->vm_flags & VM_LOCKED) {
-               unsigned long locked = current->mm->locked_vm << PAGE_SHIFT;
-               locked += new_len - old_len;
-               ret = -EAGAIN;
-               if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
-                       goto out;
-       }
-       ret = -ENOMEM;
-       if ((current->mm->total_vm << PAGE_SHIFT) + (new_len - old_len)
-           > current->rlim[RLIMIT_AS].rlim_cur)
-               goto out;
-       /* Private writable mapping? Check memory availability.. */
-       if ((vma->vm_flags & (VM_SHARED | VM_WRITE)) == VM_WRITE &&
-           !(flags & MAP_NORESERVE)                             &&
-           !vm_enough_memory((new_len - old_len) >> PAGE_SHIFT))
-               goto out;
-
-       /* old_len exactly to the end of the area..
-        * And we're not relocating the area.
-        */
-       if (old_len == vma->vm_end - addr &&
-           !((flags & MREMAP_FIXED) && (addr != new_addr)) &&
-           (old_len != new_len || !(flags & MREMAP_MAYMOVE))) {
-               unsigned long max_addr = TASK_SIZE;
-               if (vma->vm_next)
-                       max_addr = vma->vm_next->vm_start;
-               /* can we just expand the current mapping? */
-               if (max_addr - addr >= new_len) {
-                       int pages = (new_len - old_len) >> PAGE_SHIFT;
-                       spin_lock(&vma->vm_mm->page_table_lock);
-                       vma->vm_end = addr + new_len;
-                       spin_unlock(&vma->vm_mm->page_table_lock);
-                       current->mm->total_vm += pages;
-                       if (vma->vm_flags & VM_LOCKED) {
-                               current->mm->locked_vm += pages;
-                               make_pages_present(addr + old_len,
-                                                  addr + new_len);
-                       }
-                       ret = addr;
-                       goto out;
-               }
-       }
-
-       /*
-        * We weren't able to just expand or shrink the area,
-        * we need to create a new one and move it..
-        */
-       ret = -ENOMEM;
-       if (flags & MREMAP_MAYMOVE) {
-               if (!(flags & MREMAP_FIXED)) {
-                       unsigned long map_flags = 0;
-                       if (vma->vm_flags & VM_SHARED)
-                               map_flags |= MAP_SHARED;
-
-                       new_addr = get_unmapped_area(vma->vm_file, 0, new_len, vma->vm_pgoff, map_flags);
-                       ret = new_addr;
-                       if (new_addr & ~PAGE_MASK)
-                               goto out;
-               }
-               ret = move_vma(vma, addr, old_len, new_len, new_addr);
-       }
-out:
-       return ret;
-}
-
-asmlinkage unsigned long sys_mremap(unsigned long addr,
-       unsigned long old_len, unsigned long new_len,
-       unsigned long flags, unsigned long new_addr)
-{
-       unsigned long ret;
-
-       down_write(&current->mm->mmap_sem);
-       ret = do_mremap(addr, old_len, new_len, flags, new_addr);
-       up_write(&current->mm->mmap_sem);
-       return ret;
-}
diff --git a/old/xenolinux-2.4.16-sparse/mm/swapfile.c b/old/xenolinux-2.4.16-sparse/mm/swapfile.c
deleted file mode 100644 (file)
index 4884618..0000000
+++ /dev/null
@@ -1,1291 +0,0 @@
-/*
- *  linux/mm/swapfile.c
- *
- *  Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds
- *  Swap reorganised 29.12.95, Stephen Tweedie
- */
-
-#include <linux/slab.h>
-#include <linux/smp_lock.h>
-#include <linux/kernel_stat.h>
-#include <linux/swap.h>
-#include <linux/swapctl.h>
-#include <linux/blkdev.h> /* for blk_size */
-#include <linux/vmalloc.h>
-#include <linux/pagemap.h>
-#include <linux/shm.h>
-#include <linux/compiler.h>
-
-#include <asm/pgtable.h>
-
-spinlock_t swaplock = SPIN_LOCK_UNLOCKED;
-unsigned int nr_swapfiles;
-int total_swap_pages;
-static int swap_overflow;
-
-static const char Bad_file[] = "Bad swap file entry ";
-static const char Unused_file[] = "Unused swap file entry ";
-static const char Bad_offset[] = "Bad swap offset entry ";
-static const char Unused_offset[] = "Unused swap offset entry ";
-
-struct swap_list_t swap_list = {-1, -1};
-
-struct swap_info_struct swap_info[MAX_SWAPFILES];
-
-#define SWAPFILE_CLUSTER 256
-
-static inline int scan_swap_map(struct swap_info_struct *si)
-{
-       unsigned long offset;
-       /* 
-        * We try to cluster swap pages by allocating them
-        * sequentially in swap.  Once we've allocated
-        * SWAPFILE_CLUSTER pages this way, however, we resort to
-        * first-free allocation, starting a new cluster.  This
-        * prevents us from scattering swap pages all over the entire
-        * swap partition, so that we reduce overall disk seek times
-        * between swap pages.  -- sct */
-       if (si->cluster_nr) {
-               while (si->cluster_next <= si->highest_bit) {
-                       offset = si->cluster_next++;
-                       if (si->swap_map[offset])
-                               continue;
-                       si->cluster_nr--;
-                       goto got_page;
-               }
-       }
-       si->cluster_nr = SWAPFILE_CLUSTER;
-
-       /* try to find an empty (even not aligned) cluster. */
-       offset = si->lowest_bit;
- check_next_cluster:
-       if (offset+SWAPFILE_CLUSTER-1 <= si->highest_bit)
-       {
-               int nr;
-               for (nr = offset; nr < offset+SWAPFILE_CLUSTER; nr++)
-                       if (si->swap_map[nr])
-                       {
-                               offset = nr+1;
-                               goto check_next_cluster;
-                       }
-               /* We found a completly empty cluster, so start
-                * using it.
-                */
-               goto got_page;
-       }
-       /* No luck, so now go finegrined as usual. -Andrea */
-       for (offset = si->lowest_bit; offset <= si->highest_bit ; offset++) {
-               if (si->swap_map[offset])
-                       continue;
-               si->lowest_bit = offset+1;
-       got_page:
-               if (offset == si->lowest_bit)
-                       si->lowest_bit++;
-               if (offset == si->highest_bit)
-                       si->highest_bit--;
-               if (si->lowest_bit > si->highest_bit) {
-                       si->lowest_bit = si->max;
-                       si->highest_bit = 0;
-               }
-               si->swap_map[offset] = 1;
-               nr_swap_pages--;
-               si->cluster_next = offset+1;
-               return offset;
-       }
-       si->lowest_bit = si->max;
-       si->highest_bit = 0;
-       return 0;
-}
-
-swp_entry_t get_swap_page(void)
-{
-       struct swap_info_struct * p;
-       unsigned long offset;
-       swp_entry_t entry;
-       int type, wrapped = 0;
-
-       entry.val = 0;  /* Out of memory */
-       swap_list_lock();
-       type = swap_list.next;
-       if (type < 0)
-               goto out;
-       if (nr_swap_pages <= 0)
-               goto out;
-
-       while (1) {
-               p = &swap_info[type];
-               if ((p->flags & SWP_WRITEOK) == SWP_WRITEOK) {
-                       swap_device_lock(p);
-                       offset = scan_swap_map(p);
-                       swap_device_unlock(p);
-                       if (offset) {
-                               entry = SWP_ENTRY(type,offset);
-                               type = swap_info[type].next;
-                               if (type < 0 ||
-                                       p->prio != swap_info[type].prio) {
-                                               swap_list.next = swap_list.head;
-                               } else {
-                                       swap_list.next = type;
-                               }
-                               goto out;
-                       }
-               }
-               type = p->next;
-               if (!wrapped) {
-                       if (type < 0 || p->prio != swap_info[type].prio) {
-                               type = swap_list.head;
-                               wrapped = 1;
-                       }
-               } else
-                       if (type < 0)
-                               goto out;       /* out of swap space */
-       }
-out:
-       swap_list_unlock();
-       return entry;
-}
-
-static struct swap_info_struct * swap_info_get(swp_entry_t entry)
-{
-       struct swap_info_struct * p;
-       unsigned long offset, type;
-
-       if (!entry.val)
-               goto out;
-       type = SWP_TYPE(entry);
-       if (type >= nr_swapfiles)
-               goto bad_nofile;
-       p = & swap_info[type];
-       if (!(p->flags & SWP_USED))
-               goto bad_device;
-       offset = SWP_OFFSET(entry);
-       if (offset >= p->max)
-               goto bad_offset;
-       if (!p->swap_map[offset])
-               goto bad_free;
-       swap_list_lock();
-       if (p->prio > swap_info[swap_list.next].prio)
-               swap_list.next = type;
-       swap_device_lock(p);
-       return p;
-
-bad_free:
-       printk(KERN_ERR "swap_free: %s%08lx\n", Unused_offset, entry.val);
-       goto out;
-bad_offset:
-       printk(KERN_ERR "swap_free: %s%08lx\n", Bad_offset, entry.val);
-       goto out;
-bad_device:
-       printk(KERN_ERR "swap_free: %s%08lx\n", Unused_file, entry.val);
-       goto out;
-bad_nofile:
-       printk(KERN_ERR "swap_free: %s%08lx\n", Bad_file, entry.val);
-out:
-       return NULL;
-}      
-
-static void swap_info_put(struct swap_info_struct * p)
-{
-       swap_device_unlock(p);
-       swap_list_unlock();
-}
-
-static int swap_entry_free(struct swap_info_struct *p, unsigned long offset)
-{
-       int count = p->swap_map[offset];
-
-       if (count < SWAP_MAP_MAX) {
-               count--;
-               p->swap_map[offset] = count;
-               if (!count) {
-                       if (offset < p->lowest_bit)
-                               p->lowest_bit = offset;
-                       if (offset > p->highest_bit)
-                               p->highest_bit = offset;
-                       nr_swap_pages++;
-               }
-       }
-       return count;
-}
-
-/*
- * Caller has made sure that the swapdevice corresponding to entry
- * is still around or has not been recycled.
- */
-void swap_free(swp_entry_t entry)
-{
-       struct swap_info_struct * p;
-
-       p = swap_info_get(entry);
-       if (p) {
-               swap_entry_free(p, SWP_OFFSET(entry));
-               swap_info_put(p);
-       }
-}
-
-/*
- * Check if we're the only user of a swap page,
- * when the page is locked.
- */
-static int exclusive_swap_page(struct page *page)
-{
-       int retval = 0;
-       struct swap_info_struct * p;
-       swp_entry_t entry;
-
-       entry.val = page->index;
-       p = swap_info_get(entry);
-       if (p) {
-               /* Is the only swap cache user the cache itself? */
-               if (p->swap_map[SWP_OFFSET(entry)] == 1) {
-                       /* Recheck the page count with the pagecache lock held.. */
-                       spin_lock(&pagecache_lock);
-                       if (page_count(page) - !!page->buffers == 2)
-                               retval = 1;
-                       spin_unlock(&pagecache_lock);
-               }
-               swap_info_put(p);
-       }
-       return retval;
-}
-
-/*
- * We can use this swap cache entry directly
- * if there are no other references to it.
- *
- * Here "exclusive_swap_page()" does the real
- * work, but we opportunistically check whether
- * we need to get all the locks first..
- */
-int can_share_swap_page(struct page *page)
-{
-       int retval = 0;
-
-       if (!PageLocked(page))
-               BUG();
-       switch (page_count(page)) {
-       case 3:
-               if (!page->buffers)
-                       break;
-               /* Fallthrough */
-       case 2:
-               if (!PageSwapCache(page))
-                       break;
-               retval = exclusive_swap_page(page);
-               break;
-       case 1:
-               if (PageReserved(page))
-                       break;
-               retval = 1;
-       }
-       return retval;
-}
-
-/*
- * Work out if there are any other processes sharing this
- * swap cache page. Free it if you can. Return success.
- */
-int remove_exclusive_swap_page(struct page *page)
-{
-       int retval;
-       struct swap_info_struct * p;
-       swp_entry_t entry;
-
-       if (!PageLocked(page))
-               BUG();
-       if (!PageSwapCache(page))
-               return 0;
-       if (page_count(page) - !!page->buffers != 2)    /* 2: us + cache */
-               return 0;
-
-       entry.val = page->index;
-       p = swap_info_get(entry);
-       if (!p)
-               return 0;
-
-       /* Is the only swap cache user the cache itself? */
-       retval = 0;
-       if (p->swap_map[SWP_OFFSET(entry)] == 1) {
-               /* Recheck the page count with the pagecache lock held.. */
-               spin_lock(&pagecache_lock);
-               if (page_count(page) - !!page->buffers == 2) {
-                       __delete_from_swap_cache(page);
-                       SetPageDirty(page);
-                       retval = 1;
-               }
-               spin_unlock(&pagecache_lock);
-       }
-       swap_info_put(p);
-
-       if (retval) {
-               block_flushpage(page, 0);
-               swap_free(entry);
-               page_cache_release(page);
-       }
-
-       return retval;
-}
-
-/*
- * Free the swap entry like above, but also try to
- * free the page cache entry if it is the last user.
- */
-void free_swap_and_cache(swp_entry_t entry)
-{
-       struct swap_info_struct * p;
-       struct page *page = NULL;
-
-       p = swap_info_get(entry);
-       if (p) {
-               if (swap_entry_free(p, SWP_OFFSET(entry)) == 1)
-                       page = find_trylock_page(&swapper_space, entry.val);
-               swap_info_put(p);
-       }
-       if (page) {
-               page_cache_get(page);
-               /* Only cache user (+us), or swap space full? Free it! */
-               if (page_count(page) == 2 || vm_swap_full()) {
-                       delete_from_swap_cache(page);
-                       SetPageDirty(page);
-               }
-               UnlockPage(page);
-               page_cache_release(page);
-       }
-}
-
-/*
- * The swap entry has been read in advance, and we return 1 to indicate
- * that the page has been used or is no longer needed.
- *
- * Always set the resulting pte to be nowrite (the same as COW pages
- * after one process has exited).  We don't know just how many PTEs will
- * share this swap entry, so be cautious and let do_wp_page work out
- * what to do if a write is requested later.
- */
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static inline void unuse_pte(struct vm_area_struct * vma, unsigned long address,
-       pte_t *dir, swp_entry_t entry, struct page* page)
-{
-       pte_t pte = *dir;
-
-       if (likely(pte_to_swp_entry(pte).val != entry.val))
-               return;
-       if (unlikely(pte_none(pte) || pte_present(pte)))
-               return;
-       get_page(page);
-       set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot)));
-       swap_free(entry);
-       ++vma->vm_mm->rss;
-}
-
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static inline void unuse_pmd(struct vm_area_struct * vma, pmd_t *dir,
-       unsigned long address, unsigned long size, unsigned long offset,
-       swp_entry_t entry, struct page* page)
-{
-       pte_t * pte;
-       unsigned long end;
-
-       if (pmd_none(*dir))
-               return;
-       if (pmd_bad(*dir)) {
-               pmd_ERROR(*dir);
-               pmd_clear(dir);
-               return;
-       }
-       pte = pte_offset(dir, address);
-       offset += address & PMD_MASK;
-       address &= ~PMD_MASK;
-       end = address + size;
-       if (end > PMD_SIZE)
-               end = PMD_SIZE;
-       do {
-               unuse_pte(vma, offset+address-vma->vm_start, pte, entry, page);
-               address += PAGE_SIZE;
-               pte++;
-       } while (address && (address < end));
-}
-
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static inline void unuse_pgd(struct vm_area_struct * vma, pgd_t *dir,
-       unsigned long address, unsigned long size,
-       swp_entry_t entry, struct page* page)
-{
-       pmd_t * pmd;
-       unsigned long offset, end;
-
-       if (pgd_none(*dir))
-               return;
-       if (pgd_bad(*dir)) {
-               pgd_ERROR(*dir);
-               pgd_clear(dir);
-               return;
-       }
-       pmd = pmd_offset(dir, address);
-       offset = address & PGDIR_MASK;
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-               end = PGDIR_SIZE;
-       if (address >= end)
-               BUG();
-       do {
-               unuse_pmd(vma, pmd, address, end - address, offset, entry,
-                         page);
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-}
-
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static void unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir,
-                       swp_entry_t entry, struct page* page)
-{
-       unsigned long start = vma->vm_start, end = vma->vm_end;
-
-       if (start >= end)
-               BUG();
-       do {
-               unuse_pgd(vma, pgdir, start, end - start, entry, page);
-               start = (start + PGDIR_SIZE) & PGDIR_MASK;
-               pgdir++;
-       } while (start && (start < end));
-}
-
-static void unuse_process(struct mm_struct * mm,
-                       swp_entry_t entry, struct page* page)
-{
-       struct vm_area_struct* vma;
-
-       /*
-        * Go through process' page directory.
-        */
-       spin_lock(&mm->page_table_lock);
-       for (vma = mm->mmap; vma; vma = vma->vm_next) {
-               pgd_t * pgd = pgd_offset(mm, vma->vm_start);
-               unuse_vma(vma, pgd, entry, page);
-       }
-       XENO_flush_page_update_queue();
-       spin_unlock(&mm->page_table_lock);
-       return;
-}
-
-/*
- * Scan swap_map from current position to next entry still in use.
- * Recycle to start on reaching the end, returning 0 when empty.
- */
-static int find_next_to_unuse(struct swap_info_struct *si, int prev)
-{
-       int max = si->max;
-       int i = prev;
-       int count;
-
-       /*
-        * No need for swap_device_lock(si) here: we're just looking
-        * for whether an entry is in use, not modifying it; false
-        * hits are okay, and sys_swapoff() has already prevented new
-        * allocations from this area (while holding swap_list_lock()).
-        */
-       for (;;) {
-               if (++i >= max) {
-                       if (!prev) {
-                               i = 0;
-                               break;
-                       }
-                       /*
-                        * No entries in use at top of swap_map,
-                        * loop back to start and recheck there.
-                        */
-                       max = prev + 1;
-                       prev = 0;
-                       i = 1;
-               }
-               count = si->swap_map[i];
-               if (count && count != SWAP_MAP_BAD)
-                       break;
-       }
-       return i;
-}
-
-/*
- * We completely avoid races by reading each swap page in advance,
- * and then search for the process using it.  All the necessary
- * page table adjustments can then be made atomically.
- */
-static int try_to_unuse(unsigned int type)
-{
-       struct swap_info_struct * si = &swap_info[type];
-       struct mm_struct *start_mm;
-       unsigned short *swap_map;
-       unsigned short swcount;
-       struct page *page;
-       swp_entry_t entry;
-       int i = 0;
-       int retval = 0;
-       int reset_overflow = 0;
-
-       /*
-        * When searching mms for an entry, a good strategy is to
-        * start at the first mm we freed the previous entry from
-        * (though actually we don't notice whether we or coincidence
-        * freed the entry).  Initialize this start_mm with a hold.
-        *
-        * A simpler strategy would be to start at the last mm we
-        * freed the previous entry from; but that would take less
-        * advantage of mmlist ordering (now preserved by swap_out()),
-        * which clusters forked address spaces together, most recent
-        * child immediately after parent.  If we race with dup_mmap(),
-        * we very much want to resolve parent before child, otherwise
-        * we may miss some entries: using last mm would invert that.
-        */
-       start_mm = &init_mm;
-       atomic_inc(&init_mm.mm_users);
-
-       /*
-        * Keep on scanning until all entries have gone.  Usually,
-        * one pass through swap_map is enough, but not necessarily:
-        * mmput() removes mm from mmlist before exit_mmap() and its
-        * zap_page_range().  That's not too bad, those entries are
-        * on their way out, and handled faster there than here.
-        * do_munmap() behaves similarly, taking the range out of mm's
-        * vma list before zap_page_range().  But unfortunately, when
-        * unmapping a part of a vma, it takes the whole out first,
-        * then reinserts what's left after (might even reschedule if
-        * open() method called) - so swap entries may be invisible
-        * to swapoff for a while, then reappear - but that is rare.
-        */
-       while ((i = find_next_to_unuse(si, i))) {
-               /* 
-                * Get a page for the entry, using the existing swap
-                * cache page if there is one.  Otherwise, get a clean
-                * page and read the swap into it. 
-                */
-               swap_map = &si->swap_map[i];
-               entry = SWP_ENTRY(type, i);
-               page = read_swap_cache_async(entry);
-               if (!page) {
-                       /*
-                        * Either swap_duplicate() failed because entry
-                        * has been freed independently, and will not be
-                        * reused since sys_swapoff() already disabled
-                        * allocation from here, or alloc_page() failed.
-                        */
-                       if (!*swap_map)
-                               continue;
-                       retval = -ENOMEM;
-                       break;
-               }
-
-               /*
-                * Don't hold on to start_mm if it looks like exiting.
-                */
-               if (atomic_read(&start_mm->mm_users) == 1) {
-                       mmput(start_mm);
-                       start_mm = &init_mm;
-                       atomic_inc(&init_mm.mm_users);
-               }
-
-               /*
-                * Wait for and lock page.  When do_swap_page races with
-                * try_to_unuse, do_swap_page can handle the fault much
-                * faster than try_to_unuse can locate the entry.  This
-                * apparently redundant "wait_on_page" lets try_to_unuse
-                * defer to do_swap_page in such a case - in some tests,
-                * do_swap_page and try_to_unuse repeatedly compete.
-                */
-               wait_on_page(page);
-               lock_page(page);
-
-               /*
-                * Remove all references to entry, without blocking.
-                * Whenever we reach init_mm, there's no address space
-                * to search, but use it as a reminder to search shmem.
-                */
-               swcount = *swap_map;
-               if (swcount > 1) {
-                       flush_page_to_ram(page);
-                       if (start_mm == &init_mm)
-                               shmem_unuse(entry, page);
-                       else
-                               unuse_process(start_mm, entry, page);
-               }
-               if (*swap_map > 1) {
-                       int set_start_mm = (*swap_map >= swcount);
-                       struct list_head *p = &start_mm->mmlist;
-                       struct mm_struct *new_start_mm = start_mm;
-                       struct mm_struct *mm;
-
-                       spin_lock(&mmlist_lock);
-                       while (*swap_map > 1 &&
-                                       (p = p->next) != &start_mm->mmlist) {
-                               mm = list_entry(p, struct mm_struct, mmlist);
-                               swcount = *swap_map;
-                               if (mm == &init_mm) {
-                                       set_start_mm = 1;
-                                       shmem_unuse(entry, page);
-                               } else
-                                       unuse_process(mm, entry, page);
-                               if (set_start_mm && *swap_map < swcount) {
-                                       new_start_mm = mm;
-                                       set_start_mm = 0;
-                               }
-                       }
-                       atomic_inc(&new_start_mm->mm_users);
-                       spin_unlock(&mmlist_lock);
-                       mmput(start_mm);
-                       start_mm = new_start_mm;
-               }
-
-               /*
-                * How could swap count reach 0x7fff when the maximum
-                * pid is 0x7fff, and there's no way to repeat a swap
-                * page within an mm (except in shmem, where it's the
-                * shared object which takes the reference count)?
-                * We believe SWAP_MAP_MAX cannot occur in Linux 2.4.
-                *
-                * If that's wrong, then we should worry more about
-                * exit_mmap() and do_munmap() cases described above:
-                * we might be resetting SWAP_MAP_MAX too early here.
-                * We know "Undead"s can happen, they're okay, so don't
-                * report them; but do report if we reset SWAP_MAP_MAX.
-                */
-               if (*swap_map == SWAP_MAP_MAX) {
-                       swap_list_lock();
-                       swap_device_lock(si);
-                       nr_swap_pages++;
-                       *swap_map = 1;
-                       swap_device_unlock(si);
-                       swap_list_unlock();
-                       reset_overflow = 1;
-               }
-
-               /*
-                * If a reference remains (rare), we would like to leave
-                * the page in the swap cache; but try_to_swap_out could
-                * then re-duplicate the entry once we drop page lock,
-                * so we might loop indefinitely; also, that page could
-                * not be swapped out to other storage meanwhile.  So:
-                * delete from cache even if there's another reference,
-                * after ensuring that the data has been saved to disk -
-                * since if the reference remains (rarer), it will be
-                * read from disk into another page.  Splitting into two
-                * pages would be incorrect if swap supported "shared
-                * private" pages, but they are handled by tmpfs files.
-                * Note shmem_unuse already deleted its from swap cache.
-                */
-               swcount = *swap_map;
-               if ((swcount > 0) != PageSwapCache(page))
-                       BUG();
-               if ((swcount > 1) && PageDirty(page)) {
-                       rw_swap_page(WRITE, page);
-                       lock_page(page);
-               }
-               if (PageSwapCache(page))
-                       delete_from_swap_cache(page);
-
-               /*
-                * So we could skip searching mms once swap count went
-                * to 1, we did not mark any present ptes as dirty: must
-                * mark page dirty so try_to_swap_out will preserve it.
-                */
-               SetPageDirty(page);
-               UnlockPage(page);
-               page_cache_release(page);
-
-               /*
-                * Make sure that we aren't completely killing
-                * interactive performance.  Interruptible check on
-                * signal_pending() would be nice, but changes the spec?
-                */
-               if (current->need_resched)
-                       schedule();
-       }
-
-       mmput(start_mm);
-       if (reset_overflow) {
-               printk(KERN_WARNING "swapoff: cleared swap entry overflow\n");
-               swap_overflow = 0;
-       }
-       return retval;
-}
-
-asmlinkage long sys_swapoff(const char * specialfile)
-{
-       struct swap_info_struct * p = NULL;
-       unsigned short *swap_map;
-       struct nameidata nd;
-       int i, type, prev;
-       int err;
-       
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-
-       err = user_path_walk(specialfile, &nd);
-       if (err)
-               goto out;
-
-       lock_kernel();
-       prev = -1;
-       swap_list_lock();
-       for (type = swap_list.head; type >= 0; type = swap_info[type].next) {
-               p = swap_info + type;
-               if ((p->flags & SWP_WRITEOK) == SWP_WRITEOK) {
-                       if (p->swap_file == nd.dentry)
-                         break;
-               }
-               prev = type;
-       }
-       err = -EINVAL;
-       if (type < 0) {
-               swap_list_unlock();
-               goto out_dput;
-       }
-
-       if (prev < 0) {
-               swap_list.head = p->next;
-       } else {
-               swap_info[prev].next = p->next;
-       }
-       if (type == swap_list.next) {
-               /* just pick something that's safe... */
-               swap_list.next = swap_list.head;
-       }
-       nr_swap_pages -= p->pages;
-       total_swap_pages -= p->pages;
-       p->flags = SWP_USED;
-       swap_list_unlock();
-       unlock_kernel();
-       err = try_to_unuse(type);
-       lock_kernel();
-       if (err) {
-               /* re-insert swap space back into swap_list */
-               swap_list_lock();
-               for (prev = -1, i = swap_list.head; i >= 0; prev = i, i = swap_info[i].next)
-                       if (p->prio >= swap_info[i].prio)
-                               break;
-               p->next = i;
-               if (prev < 0)
-                       swap_list.head = swap_list.next = p - swap_info;
-               else
-                       swap_info[prev].next = p - swap_info;
-               nr_swap_pages += p->pages;
-               total_swap_pages += p->pages;
-               p->flags = SWP_WRITEOK;
-               swap_list_unlock();
-               goto out_dput;
-       }
-       if (p->swap_device)
-               blkdev_put(p->swap_file->d_inode->i_bdev, BDEV_SWAP);
-       path_release(&nd);
-
-       swap_list_lock();
-       swap_device_lock(p);
-       nd.mnt = p->swap_vfsmnt;
-       nd.dentry = p->swap_file;
-       p->swap_vfsmnt = NULL;
-       p->swap_file = NULL;
-       p->swap_device = 0;
-       p->max = 0;
-       swap_map = p->swap_map;
-       p->swap_map = NULL;
-       p->flags = 0;
-       swap_device_unlock(p);
-       swap_list_unlock();
-       vfree(swap_map);
-       err = 0;
-
-out_dput:
-       unlock_kernel();
-       path_release(&nd);
-out:
-       return err;
-}
-
-int get_swaparea_info(char *buf)
-{
-       char * page = (char *) __get_free_page(GFP_KERNEL);
-       struct swap_info_struct *ptr = swap_info;
-       int i, j, len = 0, usedswap;
-
-       if (!page)
-               return -ENOMEM;
-
-       len += sprintf(buf, "Filename\t\t\tType\t\tSize\tUsed\tPriority\n");
-       for (i = 0 ; i < nr_swapfiles ; i++, ptr++) {
-               if ((ptr->flags & SWP_USED) && ptr->swap_map) {
-                       char * path = d_path(ptr->swap_file, ptr->swap_vfsmnt,
-                                               page, PAGE_SIZE);
-
-                       len += sprintf(buf + len, "%-31s ", path);
-
-                       if (!ptr->swap_device)
-                               len += sprintf(buf + len, "file\t\t");
-                       else
-                               len += sprintf(buf + len, "partition\t");
-
-                       usedswap = 0;
-                       for (j = 0; j < ptr->max; ++j)
-                               switch (ptr->swap_map[j]) {
-                                       case SWAP_MAP_BAD:
-                                       case 0:
-                                               continue;
-                                       default:
-                                               usedswap++;
-                               }
-                       len += sprintf(buf + len, "%d\t%d\t%d\n", ptr->pages << (PAGE_SHIFT - 10), 
-                               usedswap << (PAGE_SHIFT - 10), ptr->prio);
-               }
-       }
-       free_page((unsigned long) page);
-       return len;
-}
-
-int is_swap_partition(kdev_t dev) {
-       struct swap_info_struct *ptr = swap_info;
-       int i;
-
-       for (i = 0 ; i < nr_swapfiles ; i++, ptr++) {
-               if (ptr->flags & SWP_USED)
-                       if (ptr->swap_device == dev)
-                               return 1;
-       }
-       return 0;
-}
-
-/*
- * Written 01/25/92 by Simmule Turner, heavily changed by Linus.
- *
- * The swapon system call
- */
-asmlinkage long sys_swapon(const char * specialfile, int swap_flags)
-{
-       struct swap_info_struct * p;
-       struct nameidata nd;
-       struct inode * swap_inode;
-       unsigned int type;
-       int i, j, prev;
-       int error;
-       static int least_priority = 0;
-       union swap_header *swap_header = 0;
-       int swap_header_version;
-       int nr_good_pages = 0;
-       unsigned long maxpages = 1;
-       int swapfilesize;
-       struct block_device *bdev = NULL;
-       unsigned short *swap_map;
-       
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-       lock_kernel();
-       swap_list_lock();
-       p = swap_info;
-       for (type = 0 ; type < nr_swapfiles ; type++,p++)
-               if (!(p->flags & SWP_USED))
-                       break;
-       error = -EPERM;
-       if (type >= MAX_SWAPFILES) {
-               swap_list_unlock();
-               goto out;
-       }
-       if (type >= nr_swapfiles)
-               nr_swapfiles = type+1;
-       p->flags = SWP_USED;
-       p->swap_file = NULL;
-       p->swap_vfsmnt = NULL;
-       p->swap_device = 0;
-       p->swap_map = NULL;
-       p->lowest_bit = 0;
-       p->highest_bit = 0;
-       p->cluster_nr = 0;
-       p->sdev_lock = SPIN_LOCK_UNLOCKED;
-       p->next = -1;
-       if (swap_flags & SWAP_FLAG_PREFER) {
-               p->prio =
-                 (swap_flags & SWAP_FLAG_PRIO_MASK)>>SWAP_FLAG_PRIO_SHIFT;
-       } else {
-               p->prio = --least_priority;
-       }
-       swap_list_unlock();
-       error = user_path_walk(specialfile, &nd);
-       if (error)
-               goto bad_swap_2;
-
-       p->swap_file = nd.dentry;
-       p->swap_vfsmnt = nd.mnt;
-       swap_inode = nd.dentry->d_inode;
-       error = -EINVAL;
-
-       if (S_ISBLK(swap_inode->i_mode)) {
-               kdev_t dev = swap_inode->i_rdev;
-               struct block_device_operations *bdops;
-
-               p->swap_device = dev;
-               set_blocksize(dev, PAGE_SIZE);
-               
-               bd_acquire(swap_inode);
-               bdev = swap_inode->i_bdev;
-               bdops = devfs_get_ops(devfs_get_handle_from_inode(swap_inode));
-               if (bdops) bdev->bd_op = bdops;
-
-               error = blkdev_get(bdev, FMODE_READ|FMODE_WRITE, 0, BDEV_SWAP);
-               if (error)
-                       goto bad_swap_2;
-               set_blocksize(dev, PAGE_SIZE);
-               error = -ENODEV;
-               if (!dev || (blk_size[MAJOR(dev)] &&
-                    !blk_size[MAJOR(dev)][MINOR(dev)]))
-                       goto bad_swap;
-               swapfilesize = 0;
-               if (blk_size[MAJOR(dev)])
-                       swapfilesize = blk_size[MAJOR(dev)][MINOR(dev)]
-                               >> (PAGE_SHIFT - 10);
-       } else if (S_ISREG(swap_inode->i_mode))
-               swapfilesize = swap_inode->i_size >> PAGE_SHIFT;
-       else
-               goto bad_swap;
-
-       error = -EBUSY;
-       for (i = 0 ; i < nr_swapfiles ; i++) {
-               struct swap_info_struct *q = &swap_info[i];
-               if (i == type || !q->swap_file)
-                       continue;
-               if (swap_inode->i_mapping == q->swap_file->d_inode->i_mapping)
-                       goto bad_swap;
-       }
-
-       swap_header = (void *) __get_free_page(GFP_USER);
-       if (!swap_header) {
-               printk("Unable to start swapping: out of memory :-)\n");
-               error = -ENOMEM;
-               goto bad_swap;
-       }
-
-       lock_page(virt_to_page(swap_header));
-       rw_swap_page_nolock(READ, SWP_ENTRY(type,0), (char *) swap_header);
-
-       if (!memcmp("SWAP-SPACE",swap_header->magic.magic,10))
-               swap_header_version = 1;
-       else if (!memcmp("SWAPSPACE2",swap_header->magic.magic,10))
-               swap_header_version = 2;
-       else {
-               printk("Unable to find swap-space signature\n");
-               error = -EINVAL;
-               goto bad_swap;
-       }
-       
-       switch (swap_header_version) {
-       case 1:
-               memset(((char *) swap_header)+PAGE_SIZE-10,0,10);
-               j = 0;
-               p->lowest_bit = 0;
-               p->highest_bit = 0;
-               for (i = 1 ; i < 8*PAGE_SIZE ; i++) {
-                       if (test_bit(i,(char *) swap_header)) {
-                               if (!p->lowest_bit)
-                                       p->lowest_bit = i;
-                               p->highest_bit = i;
-                               maxpages = i+1;
-                               j++;
-                       }
-               }
-               nr_good_pages = j;
-               p->swap_map = vmalloc(maxpages * sizeof(short));
-               if (!p->swap_map) {
-                       error = -ENOMEM;                
-                       goto bad_swap;
-               }
-               for (i = 1 ; i < maxpages ; i++) {
-                       if (test_bit(i,(char *) swap_header))
-                               p->swap_map[i] = 0;
-                       else
-                               p->swap_map[i] = SWAP_MAP_BAD;
-               }
-               break;
-
-       case 2:
-               /* Check the swap header's sub-version and the size of
-                   the swap file and bad block lists */
-               if (swap_header->info.version != 1) {
-                       printk(KERN_WARNING
-                              "Unable to handle swap header version %d\n",
-                              swap_header->info.version);
-                       error = -EINVAL;
-                       goto bad_swap;
-               }
-
-               p->lowest_bit  = 1;
-               maxpages = SWP_OFFSET(SWP_ENTRY(0,~0UL)) - 1;
-               if (maxpages > swap_header->info.last_page)
-                       maxpages = swap_header->info.last_page;
-               p->highest_bit = maxpages - 1;
-
-               error = -EINVAL;
-               if (swap_header->info.nr_badpages > MAX_SWAP_BADPAGES)
-                       goto bad_swap;
-               
-               /* OK, set up the swap map and apply the bad block list */
-               if (!(p->swap_map = vmalloc(maxpages * sizeof(short)))) {
-                       error = -ENOMEM;
-                       goto bad_swap;
-               }
-
-               error = 0;
-               memset(p->swap_map, 0, maxpages * sizeof(short));
-               for (i=0; i<swap_header->info.nr_badpages; i++) {
-                       int page = swap_header->info.badpages[i];
-                       if (page <= 0 || page >= swap_header->info.last_page)
-                               error = -EINVAL;
-                       else
-                               p->swap_map[page] = SWAP_MAP_BAD;
-               }
-               nr_good_pages = swap_header->info.last_page -
-                               swap_header->info.nr_badpages -
-                               1 /* header page */;
-               if (error) 
-                       goto bad_swap;
-       }
-       
-       if (swapfilesize && maxpages > swapfilesize) {
-               printk(KERN_WARNING
-                      "Swap area shorter than signature indicates\n");
-               error = -EINVAL;
-               goto bad_swap;
-       }
-       if (!nr_good_pages) {
-               printk(KERN_WARNING "Empty swap-file\n");
-               error = -EINVAL;
-               goto bad_swap;
-       }
-       p->swap_map[0] = SWAP_MAP_BAD;
-       swap_list_lock();
-       swap_device_lock(p);
-       p->max = maxpages;
-       p->flags = SWP_WRITEOK;
-       p->pages = nr_good_pages;
-       nr_swap_pages += nr_good_pages;
-       total_swap_pages += nr_good_pages;
-       printk(KERN_INFO "Adding Swap: %dk swap-space (priority %d)\n",
-              nr_good_pages<<(PAGE_SHIFT-10), p->prio);
-
-       /* insert swap space into swap_list: */
-       prev = -1;
-       for (i = swap_list.head; i >= 0; i = swap_info[i].next) {
-               if (p->prio >= swap_info[i].prio) {
-                       break;
-               }
-               prev = i;
-       }
-       p->next = i;
-       if (prev < 0) {
-               swap_list.head = swap_list.next = p - swap_info;
-       } else {
-               swap_info[prev].next = p - swap_info;
-       }
-       swap_device_unlock(p);
-       swap_list_unlock();
-       error = 0;
-       goto out;
-bad_swap:
-       if (bdev)
-               blkdev_put(bdev, BDEV_SWAP);
-bad_swap_2:
-       swap_list_lock();
-       swap_map = p->swap_map;
-       nd.mnt = p->swap_vfsmnt;
-       nd.dentry = p->swap_file;
-       p->swap_device = 0;
-       p->swap_file = NULL;
-       p->swap_vfsmnt = NULL;
-       p->swap_map = NULL;
-       p->flags = 0;
-       if (!(swap_flags & SWAP_FLAG_PREFER))
-               ++least_priority;
-       swap_list_unlock();
-       if (swap_map)
-               vfree(swap_map);
-       path_release(&nd);
-out:
-       if (swap_header)
-               free_page((long) swap_header);
-       unlock_kernel();
-       return error;
-}
-
-void si_swapinfo(struct sysinfo *val)
-{
-       unsigned int i;
-       unsigned long nr_to_be_unused = 0;
-
-       swap_list_lock();
-       for (i = 0; i < nr_swapfiles; i++) {
-               unsigned int j;
-               if (swap_info[i].flags != SWP_USED)
-                       continue;
-               for (j = 0; j < swap_info[i].max; ++j) {
-                       switch (swap_info[i].swap_map[j]) {
-                               case 0:
-                               case SWAP_MAP_BAD:
-                                       continue;
-                               default:
-                                       nr_to_be_unused++;
-                       }
-               }
-       }
-       val->freeswap = nr_swap_pages + nr_to_be_unused;
-       val->totalswap = total_swap_pages + nr_to_be_unused;
-       swap_list_unlock();
-}
-
-/*
- * Verify that a swap entry is valid and increment its swap map count.
- *
- * Note: if swap_map[] reaches SWAP_MAP_MAX the entries are treated as
- * "permanent", but will be reclaimed by the next swapoff.
- */
-int swap_duplicate(swp_entry_t entry)
-{
-       struct swap_info_struct * p;
-       unsigned long offset, type;
-       int result = 0;
-
-       type = SWP_TYPE(entry);
-       if (type >= nr_swapfiles)
-               goto bad_file;
-       p = type + swap_info;
-       offset = SWP_OFFSET(entry);
-
-       swap_device_lock(p);
-       if (offset < p->max && p->swap_map[offset]) {
-               if (p->swap_map[offset] < SWAP_MAP_MAX - 1) {
-                       p->swap_map[offset]++;
-                       result = 1;
-               } else if (p->swap_map[offset] <= SWAP_MAP_MAX) {
-                       if (swap_overflow++ < 5)
-                               printk(KERN_WARNING "swap_dup: swap entry overflow\n");
-                       p->swap_map[offset] = SWAP_MAP_MAX;
-                       result = 1;
-               }
-       }
-       swap_device_unlock(p);
-out:
-       return result;
-
-bad_file:
-       printk(KERN_ERR "swap_dup: %s%08lx\n", Bad_file, entry.val);
-       goto out;
-}
-
-/*
- * Page lock needs to be held in all cases to prevent races with
- * swap file deletion.
- */
-int swap_count(struct page *page)
-{
-       struct swap_info_struct * p;
-       unsigned long offset, type;
-       swp_entry_t entry;
-       int retval = 0;
-
-       entry.val = page->index;
-       if (!entry.val)
-               goto bad_entry;
-       type = SWP_TYPE(entry);
-       if (type >= nr_swapfiles)
-               goto bad_file;
-       p = type + swap_info;
-       offset = SWP_OFFSET(entry);
-       if (offset >= p->max)
-               goto bad_offset;
-       if (!p->swap_map[offset])
-               goto bad_unused;
-       retval = p->swap_map[offset];
-out:
-       return retval;
-
-bad_entry:
-       printk(KERN_ERR "swap_count: null entry!\n");
-       goto out;
-bad_file:
-       printk(KERN_ERR "swap_count: %s%08lx\n", Bad_file, entry.val);
-       goto out;
-bad_offset:
-       printk(KERN_ERR "swap_count: %s%08lx\n", Bad_offset, entry.val);
-       goto out;
-bad_unused:
-       printk(KERN_ERR "swap_count: %s%08lx\n", Unused_offset, entry.val);
-       goto out;
-}
-
-/*
- * Prior swap_duplicate protects against swap device deletion.
- */
-void get_swaphandle_info(swp_entry_t entry, unsigned long *offset, 
-                       kdev_t *dev, struct inode **swapf)
-{
-       unsigned long type;
-       struct swap_info_struct *p;
-
-       type = SWP_TYPE(entry);
-       if (type >= nr_swapfiles) {
-               printk(KERN_ERR "rw_swap_page: %s%08lx\n", Bad_file, entry.val);
-               return;
-       }
-
-       p = &swap_info[type];
-       *offset = SWP_OFFSET(entry);
-       if (*offset >= p->max && *offset != 0) {
-               printk(KERN_ERR "rw_swap_page: %s%08lx\n", Bad_offset, entry.val);
-               return;
-       }
-       if (p->swap_map && !p->swap_map[*offset]) {
-               printk(KERN_ERR "rw_swap_page: %s%08lx\n", Unused_offset, entry.val);
-               return;
-       }
-       if (!(p->flags & SWP_USED)) {
-               printk(KERN_ERR "rw_swap_page: %s%08lx\n", Unused_file, entry.val);
-               return;
-       }
-
-       if (p->swap_device) {
-               *dev = p->swap_device;
-       } else if (p->swap_file) {
-               *swapf = p->swap_file->d_inode;
-       } else {
-               printk(KERN_ERR "rw_swap_page: no swap file or device\n");
-       }
-       return;
-}
-
-/*
- * swap_device_lock prevents swap_map being freed. Don't grab an extra
- * reference on the swaphandle, it doesn't matter if it becomes unused.
- */
-int valid_swaphandles(swp_entry_t entry, unsigned long *offset)
-{
-       int ret = 0, i = 1 << page_cluster;
-       unsigned long toff;
-       struct swap_info_struct *swapdev = SWP_TYPE(entry) + swap_info;
-
-       if (!page_cluster)      /* no readahead */
-               return 0;
-       toff = (SWP_OFFSET(entry) >> page_cluster) << page_cluster;
-       if (!toff)              /* first page is swap header */
-               toff++, i--;
-       *offset = toff;
-
-       swap_device_lock(swapdev);
-       do {
-               /* Don't read-ahead past the end of the swap area */
-               if (toff >= swapdev->max)
-                       break;
-               /* Don't read in free or bad pages */
-               if (!swapdev->swap_map[toff])
-                       break;
-               if (swapdev->swap_map[toff] == SWAP_MAP_BAD)
-                       break;
-               toff++;
-               ret++;
-       } while (--i);
-       swap_device_unlock(swapdev);
-       return ret;
-}